파이썬 유니크(백준 BOJ 5533)


문제

상근이와 친구들은 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

예제 입력 2

3
89 92 77
89 92 63
89 63 77

예제 출력 2

0
63
63


힌트

  • 플레이어 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


📝 풀어보기

📌 참가자의 수 N을 입력받고 N의 값 만큼 반복하며 참가자들의 점수를 입력받는다.

N = int(input())
game = [list(map(int, input().split())) for _ in range(N)]


📌 N만큼 반복하면서 결과값을 담을 변수 sum를 만든다.

게임 라운드는 3회 뿐이므로 3의 값만큼 반복하면서 상대가 낸 점수와 같은 값인지 확인할 변수check와 값을 비교하기 위한 변수 a를 만든다.

다시 N만큼 반복하면서 k와 i가 같다면 건너뛰고 game[k][j] 가 a와 같다면 check를 0으로 만들고 break한다. (상대와 내가 같은 숫자를 낸 경우이므로 0점 처리)

for i in range(N): 
    sum = 0 
    for j in range(3):
      	a = score[i][j]
        check = 1
        for k in range(N):
            if k == i:
                continue
            if game[k][j] == a:
                check = 0 
                break


📌 game[k][j]a 를 비교한 check가 1이라면, 합산하고 출력한다.

        if check == 1:
            sum += a
    print(sum)


전체 코드

N = int(input())

score = [list(map(int, input().split())) for _ in range(N)]

for i in range(N):
    sum = 0
    for j in range(3):
        a = score[i][j]
        check = 1
        for k in range(N):
            if i == k:
                continue
            if a == score[k][j]:
                check = 0
                break
        if check == 1:
            sum += a
    print(sum)

관심있을 포스팅