BoJ 14544 - Vote [with Python / 문제 한국어로 번역]

ssook·2023년 10월 11일
0

BoJ 문제기록

목록 보기
24/29
post-thumbnail

📍 문제

베냉(서아프리카의 국가)은 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')
profile
개발자에서, IT Business 담당자로. BrSE 업무를 수행하고 있습니다.

0개의 댓글