[ BOJ / Python ] 12760번 최후의 승자는 누구?

황승환·2021년 12월 13일
0

Python

목록 보기
46/498

이번 문제는 각 플레이어들이 가지는 카드를 오름차순으로 정렬한 뒤에 카드의 수 m만큼 반복하며 해당 순서의 카드 중 가장 큰 수와 비교하여 이와 같은 수의 카드를 가질 경우 결과를 저장하는 배열에서 해당 플레이어의 인덱스의 수를 증가시켜 결과 배열에서 가장 큰 수와 같은 수를 가지는 인덱스들을 출력하여 해결하였다.

  • n과 m을 입력받는다.
  • 플레이어의 카드를 저장하는 player배열을 선언한다.
  • 플레이어의 이긴 횟수를 저장할 answer배열에 0을 n만큼 넣어준다.
  • 이긴 플레이어 번호를 저장할 result배열을 선언한다.
  • 0부터 n까지의 i에 대한 for문을 돌린다.
    -> 임의의 배열 tmp에 카드를 정렬하여 입력받는다.
    -> player에 tmp배열을 넣는다.
  • 0부터 m까지의 i에 대한 for문을 돌린다.
    -> i번째 경기에서 각 플레이어들이 사용할 카드의 정보를 저장할 tmp배열을 선언한다.
    -> 0부터 n까지의 j에 대한 for문을 돌린다.
    --> tmp배열에 j플레이어의 i번째 카드를 넣는다.
    -> tmp배열의 가장 큰 수를 mx변수에 저장한다.
    -> 0부터 n까지의 j에 대한 for문을 돌린다.
    --> 만약 mx변수와 tmp[j]가 같다면 j플레이어는 승리한 것이므로 answer[j]를 1 증가시킨다.
  • winner변수를 선언하고 가장 많이 이긴 플레이어의 인덱스를 저장한다.
  • 0부터 n까지의 i에 대한 for문을 돌린다.
    -> 만약 answer[i]가 winner와 같다면 result배열에 i+1을 넣어준다. (프로그램의 첫번째 인덱스는 0이지만 여기서 플레이어는 1번부터 시작하므로)
  • result배열을 출력한다.

Code

n,m=map(int, input().split())
player=[]
answer=[0]*n
result=[]
for i in range(n):
    tmp=sorted(list(map(int, input().split())))
    player.append(tmp)
for i in range(m):
    tmp=[]
    for j in range(n):
        tmp.append(player[j][i])
    mx=max(tmp)
    for j in range(n):
        if mx==tmp[j]:
            answer[j]+=1
winner=max(answer)
for i in range(n):
    if answer[i]==winner:
        result.append(i+1)
print(*result)

profile
꾸준함을 꿈꾸는 SW 전공 학부생의 개발 일기

0개의 댓글