BOJ-Algorithm
백준 10546 - 배부른 마라토너
bellhundred
2022. 1. 21. 10:16
https://www.acmicpc.net/problem/10546
10546번: 배부른 마라토너
마라토너라면 국적과 나이를 불문하고 누구나 참가하고 싶어하는 백준 마라톤 대회가 열린다. 42.195km를 달리는 이 마라톤은 모두가 참가하고 싶어했던 만큼 매년 모두가 완주해왔다. 단, 한 명
www.acmicpc.net
import sys
input = sys.stdin.readline
arr = dict()
n = int(input().strip())
for i in range(n):
name = input().strip()
if name in arr.keys():
arr[name]+=1
else:
arr[name]=1
for j in range(n-1):
name = input().strip()
arr[name]-=1
print(list(arr.keys())[list(arr.values()).index(max(list(arr.values())))])
해시 테이블을 활용하는 문제긴 한데, 동명이인이 있을 수 있다고 한다. 그러면 set은 사용할 수 없다. list로 제출하면 시간초과가 뜬다. 파이썬에서는 해시테이블을 제공해주는 자료구조가 set말고도 dict가 있다. 이번 문제는 dict로 푸는 것이 좋다.
참가자들의 이름을 입력받고, 동명이인인 경우에는 arr[name]에 +1을 해서 동명이인이 있다는 것을 표시한다.
완주자들의 이름을 입력받을 때마다, arr[name]에 -1을 해 둔다.
문제의 조건에서, 완주를 하지 못한 사람은 단 1명이므로 dict의 value 값은 아마 0,0,0,1,0,0,0.... 이 될 것이다.
이 중 1인 것의 인덱스를 찾고, 해당 값의 인덱스에 해당하는 dict의 key값을 찾아 출력한다.
이 부분은 stackoverflow의 도움을 받았다.
참고 : https://stackoverflow.com/questions/268272/getting-key-with-maximum-value-in-dictionary