코딩 테스트 연습/백준
[Python]Baekjoon 5533번: 유니크
jaeheon0520
2024. 2. 22. 17:41
1. 문제
https://www.acmicpc.net/problem/5533
5533번: 유니크
첫째 줄에 참가자의 수 N이 주어진다. (2 ≤ N ≤ 200) 둘째 줄부터 N개 줄에는 각 플레이어가 1번째, 2번째, 3번째 게임에서 쓴 수가 공백으로 구분되어 주어진다.
www.acmicpc.net
각 플레이어가 3번의 게임에서 얻은 점수의 합을 구하는 문제이다.
게임은 플레이어가 적은 숫자가 다른 플레이어와 겹치지 않는다면 점수를 얻어가는 간단한 게임이다.
2. 풀이
2차원 리스트(배열)을 우선 떠올려야 한다.
총 3번의 게임을 진행하므로, 3개의 리스트를 가진 2차원 리스트를 만들 것이다.
첫 번째 리스트에는 첫 번째 게임에서 플레이어들이 적은 점수, 두 번째 리스트에는 두 번째 게임에서 플레이어들이 적은 점수, 세 번째 리스트에는 세 번째 게임에서 플레이어들이 적은 점수가 저장될 것이다.
그다음 이중 반복문을 활용해서 겹치는 점수가 있는지 확인한다.
이 로직을 생각해 내는 것이 핵심이다.
.count() 메소드를 숫자가 2개 이상 카운트 된다면 해당 플레이어의 점수를 추가하지 않으면 된다.
아래 코드에서 i는 게임 횟수, j는 몇 번째 플레이어인지를 나타낸다.
3. 코드
import sys
input = sys.stdin.readline
player = int(input())
number = [[], [], []] # 각 게임에서 플레이어들이 적은 점수를 저장할 리스트
for _ in range (player): # 점수 입력받아서 저장하기
a, b, c = map(int, input().split())
number[0].append(a)
number[1].append(b)
number[2].append(c)
score = [0] * player # 플레이어의 최종 점수를 저장할 리스트(배열)
for i in range (3):
for j in range (player):
if (number[i].count(number[i][j]) >= 2): # 같은 숫자를 적은 플레이어가 있는 경우
score[j] += 0 # 0점
else:
score[j] += number[i][j]
for i in score: # 최종 점수 출력
print(i)
4. 느낀점
파이썬에서 2차원 리스트를 간단하게 사용해 보았고 .count() 메소드를 사용해 보았다.
뭔가를 수학적으로 해결한다는 건 정말 어려운 일인 것 같다.
파이썬에 빨리 적응하도록 하자.
오늘 하루도 쌓였다.