백준 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
풀이 과정
쉬운 문제다. 여기서 zip() 함수에 대해 잘 알 수 있었다.
이전에 다른 비슷한 문제들은 2차원 리스트의 각 열들을 따로 뗐는데 zip() 함수를 이용해 한 번에 해결할 수 있었다.
코드 1
N = int(input())
data = []
for i in range(N):
data.append(list(map(int, input().split())))
players = [0] * N
for c in range(3):
col = []
for r in range(N):
col.append(data[r][c])
for i, num in enumerate(col):
if col.count(num) == 1:
players[i] += num
print(*players, sep='\n')
코드 2
N = int(input())
players = []
for _ in range(N):
players.append(list(map(int, input().split())))
scores = [0] * N
for nth_round in zip(*players):
for i, score in enumerate(nth_round):
if nth_round.count(score) == 1:
scores[i] += score
print(*scores, sep='\n')
Author And Source
이 문제에 관하여(백준 5533 유니크), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@mynote/백준-5533-유니크저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)