문제
상근이와 친구들은 MT에 가서 아래 설명과 같이 재미있는 게임을 할 것이다.
각 플레이어는 1이상 100 이하의 정수를 카드에 적어 제출한다. 각 플레이어는 자신과 같은 수를 쓴 사람이 없다면, 자신이 쓴 수와 같은 점수를 얻는다. 만약, 같은 수를 쓴 다른 사람이 있는 경우에는 점수를 얻을 수 없다.
상근이와 친구들은 이 게임을 3번 했다. 각 플레이어가 각각 쓴 수가 주어졌을 때, 3번 게임에서 얻은 총 점수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 참가자의 수 N이 주어진다. (2 ≤ N ≤ 200) 둘째 줄부터 N개 줄에는 각 플레이어가 1번째, 2번째, 3번째 게임에서 쓴 수가 공백으로 구분되어 주어진다.
출력
각 플레이어가 3번의 게임에서 얻은 총 점수를 입력으로 주어진 순서대로 출력한다.
예제 입력 1
5 100 99 98 100 97 92 63 89 63 99 99 99 89 97 98 |
예제 출력 1
0 92 215 198 89 |
힌트
플레이어 1 : 0 + 0 + 0 = 0
플레이어 2 : 0 + 0 + 92 = 92
플레이어 3 : 63 + 89 + 63 = 215
플레이어 4 : 99 + 0 + 99 = 198
플레이어 5 : 89 + 0 + 0 = 89
더보기
Solution
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
int main(void)
{
int **score=NULL, N, *total=NULL;;
scanf("%d", &N);
total=(int *)calloc(N,sizeof(int));
score=(int **)malloc(N*sizeof(int *));
for(int i=0;i<N;i++)
score[i]=(int *)malloc(3*sizeof(int));
for(int i=0;i<N;i++)
for(int j=0;j<3;j++)
scanf("%d", &score[i][j]);
for(int i=0;i<3;i++)
for(int j=0;j<N;j++)
{
bool same=false;
for(int k=0;k<N;k++)
if(j==k)
continue;
else if(score[j][i]==score[k][i])
{
same=true;
break;
}
if(!same)
total[j]+=score[j][i];
}
for(int i=0;i<N;i++)
printf("%d\n", total[i]);
for(int i=0;i<N;i++)
free(score[i]);
free(score);
free(total);
return 0;
}
728x90
'백준 알고리즘' 카테고리의 다른 글
<백준 알고리즘> 4880번: 다음수 (0) | 2020.10.27 |
---|---|
<백준 알고리즘> 2985번: 세 수 (0) | 2020.10.27 |
<백준 알고리즘> 2863번: 이게 분수? (0) | 2020.10.27 |
<백준 알고리즘> 2153번: 소수 단어 (0) | 2020.10.27 |
<백준 알고리즘> 10409번: 서버 (0) | 2020.10.27 |