코딩 테스트 연습/백준

[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() 메소드를 사용해 보았다.

 

뭔가를 수학적으로 해결한다는 건 정말 어려운 일인 것 같다.

 

파이썬에 빨리 적응하도록 하자.

 

오늘 하루도 쌓였다.