문제
https://www.acmicpc.net/problem/5533
코드
n=int(input())
alist=[]
blist=[]
dlist=[]
#ex)처음 플레이어의 숫자가 주어진다 플레이어 수는 5명이라고 하자
for i in range(n):
gamelist=list(map(int,input().split()))
#점수를 입력한다
#5명이 3번의 게임당 얻은 점수
"""
1번째 2번째 3번째
100 99 98 1번째사람이 3번게임해서 얻은점수
100 97 92 2번째사람이 3번게임해서 얻은점수
63 89 63 3번째사람이 3번게임해서 얻은점수
99 99 99 4번째사람이 3번게임해서 얻은점수
89 97 98 5번째사람이 3번게임해서 얻은점수
"""
#다음과 같다
alist.append(gamelist)
#print(alist)
#alist=각 사람들이 3번게임해서 얻은점수씩 들어있는 리스트들이 들어있는 2차원리스트
#[1번사람: [100, 99, 98], 2번사람:[100, 97, 92],
#3번사람:[63, 89, 63], 4번사람:[99, 99, 99], 5번사람:[89, 97, 98]]
for i in range(3):
clist=[]
for j in range(n):
clist.append(alist[j][i])
blist.append(clist)
#print(blist)
#blist=각 게임의 단계별로 5명의 사람들이 얼마나 점수를 얻었는지를 나타내는 리스트가 들어있는 2차원리스트
#[1번게임:[100, 100, 63, 99, 89], 2번게임:[99, 97, 89, 99, 97], 3번게임:[98, 92, 63, 99, 98]]
scorelist=[0]*n
#5명의 점수를 나타내는 scorelist 지금은[0,0,0,0,0]
#print(scorelist)
for i in range(3):
newlist=[]
for j in range(n):
number=blist[i][j]
newlist=blist[i]
andlist=newlist[0:j]+newlist[j+1:300]
#blist를 이용해 number를 제외한 리스트를 만들어 놓기 (andlist)
#print(andlist,end=" ")
#print(number)
if number not in andlist:
scorelist[j]+=number
#print('O',end=" ")
#print("\n")
#number랑 같은값이 andlist에 들어있지 않은지 검사하고
#같은 값이 없다면 점수를 얻지못함
#매 게임마다 5명이 점수를 얻는지 얻지못하는지 판단하고 계산함
#print("\n")
#print(scorelist)
#'O'가 있는 부분 즉 number랑 중복되는 값이 없는 부분은 점수를 얻었으므로
#scorelist=[0,0,0,0,0]에서 scorelist=[0,92,215,198,89]로 바뀜
for i in scorelist:
print(i)
문제풀이
1)2차원리스트 5x3로 입력받은것을 3x5로 바꿔야한다
2)2차원리스트 안에 있는 첫번째리스트를 onelist라할때 onelist의 첫번째원소를 제외한 다른 원소들의 값들 중 첫번째원소랑 같은 값이 존재하는지 알아보아야한다
3)이 과정을 두번째원소 세번째원소 반복을 하게 만든다
4)그리고 2번째 리스트 3번째리스트에서도 2) 3)을 반복한다
5)중복되는 값이 없는 곳에 점수를 증가시킨다
6)답을 출력한다
'Koala - 13기 > 기초 알고리즘 스터디' 카테고리의 다른 글
[백준/python] 3029번 경고 (0) | 2024.02.11 |
---|---|
[백준/Python] 1182:부분수열의 합 (0) | 2024.02.05 |
[백준/c++] 10825: 국영수 (0) | 2024.02.04 |
문제 https://www.acmicpc.net/problem/11718 [pthyon] (0) | 2024.02.04 |
[백준/C++] 13561번 회문 (0) | 2024.02.04 |