베냉(서아프리카의 국가)은 2016년 3월 6일에 대통령 선거를 개최하려고 합니다.
여러 후보가 이 대통령 선거에 지원 신청서를 제출했습니다.
CENA는 "국가 독립 선거위원회"로 알려진 기관으로사, 이 대통령 선거를 관리하는 역할을 맡았습니다.
베냉 선거법의 제15조에 따르면 CENA는 선거 준비, 조직, 투표 감독 및 결과 집계를 담당하고 있습니다.
당신은 훌륭한 프로그래머로서, CENA가 대통령 선거 결과를 집계할 수 있게끔 도와달라고 요청받았습니다.
입력의 첫 번째 줄에는 단일 정수 P (1 ≤ P ≤ 1000)가 포함되어 있습니다. 그리고 이는 뒤이어 오는 데이터 세트의 갯수입니다.
각 데이터 세트는 후보자 수 n (1 ≤ n ≤ 100)을 포함하는 줄, 공백, 집계할 결과 수 m (1 ≤ m ≤ 1000)가 포함된 줄로 이루어져 있으며, 그 뒤에 n개의 줄과 m개의 줄이 나옵니다.
n개의 줄에는 후보자의 이름이 각각 하나씩 포함되어 있습니다.
m개의 줄에는 각 후보자의 이름 X, 공백, 후보자의 결과 R 및 투표 센터 C가 포함되어 있습니다.
X와 C는 최대 1000자 이내의 문자열이며, R은 양의 정수입니다.
각 데이터 세트에 대해, 하나의 우승자만 있는 경우, "VOTE i: THE WINNER IS
"라는 텍스트가 포함된 출력 한 줄을 생성하고, 이어서 우승자의 이름, 공백, 그리고 우승자의 총 결과를 포함합니다.
그렇지 않은 경우, 다음 출력을 생성합니다: "VOTE i: THERE IS A DILEMMA
". 여기서 i는 데이터 세트의 번호입니다.
딕셔너리와 정렬을 이용하면 간단하게 풀 수 있는 문제.
다만, 딕셔너리 내에 최댓값이 중복될 경우의 처리를 따로 해줘야 한다.
나 같은 경우 List Comprehension을 사용하여 해당 부분에 필터를 따로 걸어줌으로써 처리를 진행해주었다.
import sys
t = int(sys.stdin.readline().rstrip())
for i in range(t):
n, m = map(int, sys.stdin.readline().rstrip().split())
score = {}
for _ in range(n):
name = sys.stdin.readline().rstrip()
score[name] = 0
for _ in range(m):
name, vote, region = sys.stdin.readline().rstrip().split()
vote = int(vote)
score[name] += vote
max_vote = max(score.values())
winners = [name for name, vote in score.items() if vote == max_vote]
if len(winners) == 1:
print(f'VOTE {i + 1}: THE WINNER IS {winners[0]} {max_vote}')
else:
print(f'VOTE {i + 1}: THERE IS A DILEMMA')