유니크 - 5533
분류
사칙연산, 구현, 수학
문제 설명
상근이와 친구들은 MT에 가서 아래 설명과 같이 재미있는 게임을 할 것이다.
각 플레이어는 1이상 100 이하의 정수를 카드에 적어 제출한다. 각 플레이어는 자신과 같은 수를 쓴 사람이 없다면, 자신이 쓴 수와 같은 점수를 얻는다. 만약, 같은 수를 쓴 다른 사람이 있는 경우에는 점수를 얻을 수 없다.
상근이와 친구들은 이 게임을 3번 했다. 각 플레이어가 각각 쓴 수가 주어졌을 때, 3번 게임에서 얻은 총 점수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 참가자의 수 N이 주어진다. (2 ≤ N ≤ 200) 둘째 줄부터 N개 줄에는 각 플레이어가 1번째, 2번째, 3번째 게임에서 쓴 수가 공백으로 구분되어 주어진다.
출력
각 플레이어가 3번의 게임에서 얻은 총 점수를 입력으로 주어진 순서대로 출력한다.
🙋 문제 해석
- N만큼 사람이 주어진다.
- 고정된 세 개의 숫자를 고른다.
- 고정된 숫자가 M이라고 하면 [N][M] 행렬을 입력받는다.
- [0][M] = [1][M] 라면 점수는 0이다.
하지만 여기선 N의 숫자들을 비교해야하기 때문에 사람별로 구분하게 되면, 복잡해진다. 그렇기 때문에 고정된 숫자들끼리의 리스트들을 넣어서 비교했다.
예를들어 N=4 라면
참가자 1= [1,2,3]
참가자 2=[5,5,5]
참가자 3=[6,7,8]
참가자 4=[9,9,9]
참가별 점수 = [[1,2,3].[5,5,5],[6,7,8],[9,9,9]]
->
첫번째 게임 = [1,5,6,9]
두번째 게임 = [2,5,7,9]
세번째 게임 = [3,5,8,9]
게임별 점수 = [1,5,6,9],[2,5,7,9],[3,5,8,9]
로 바꾸었다.
🔑 Solution 🔑
N = int(input())
lis = [[],[],[]]
score = [0] * N
for i in range(N):
T = list(map(int,input().split()))
lis[0].append(T[0])
lis[1].append(T[1])
lis[2].append(T[2])
for i in range(3):
for j in range(N):
if lis[i].count(lis[i][j]) > 1 :
score[j] += 0
else :
score[j] += lis[i][j]
for i in score:
print(i)
```
🕐 시간 복잡도
- N + 3N
- 4N - > O(N)
for문이 많아 보이지만 상수값들이 많다.
배열 초기화와 이중배열에 감이 안오는 사람이나 구현, 문제해결능력을 키우려는 사람이 여러번 풀면 좋은 문제인거 같다
🙇
'코딩테스트 > 백준' 카테고리의 다른 글
[백준][10799] - 쇠막대기 python 파이썬 (0) | 2023.04.27 |
---|---|
[백준][17413] - 단어 뒤집기 2 python 파이썬 (0) | 2023.04.27 |
[백준][1026] - 보물 python 파이썬 (0) | 2023.04.24 |
[백준][1302] - 베스트셀러 python 파이썬 (0) | 2023.04.23 |
[백준][11651]- 좌표 정렬하기 2 python 파이썬 (0) | 2023.04.22 |