본문 바로가기
Python/알고리즘

[COS PRO 2급 #4-8] 누가 반장이 될까요?

by 포푸리 (POPOOLY) 2023. 1. 29.
반응형

문제설명

1번부터 n번까지의 후보에 대한 투표 결과가 주어질 때, 과반수를 득표한 후보자의 번호를 구하려고 합니다. 여기서 과반수란 절반이 넘는 수를 의미합니다.

예를 들어, 1번부터 3번까지의 후보에 대한 투표 결과가 [1, 2, 1, 3, 1, 2, 1]이라면 순서대로 [1번, 2번, 1번, 3번, 1번, 2번, 1번] 후보에 투표했음을 나타내고, 이 경우 당선된 후보자의 번호는 1번입니다.

후보의 수 n, 투표 결과가 담긴 리스트 votes가 매개변수로 주어질 때, 과반수를 득표한 후보자의 번호를 return 하도록 solution 함수를 작성했습니다. 그러나, 코드 일부분이 잘못되어있기 때문에, 몇몇 입력에 대해서는 올바르게 작동하지 않습니다. 주어진 코드에서 <U>**한 줄**</U>만 변경해서 모든 입력에 대해 올바르게 동작하도록 수정하세요. 

매개변수 설명

후보의 수 n, 투표 결과가 담긴 리스트 votes가 solution 함수의 매개변수로 주어집니다.
* n은 1 이상 100 이하의 자연수입니다.
* votes의 길이는 1 이상 1,000 이하의 자연수입니다.
* votes의 각 원소는 1 이상 n 이하의 자연수입니다.

return 값 설명

과반수를 득표한 후보자의 번호를 return 해주세요.
* 만약, 과반수를 득표한 후보자가 없다면 -1을 return 해주세요.

예시

| n | votes | return |
|---|------|--------|
| 3 | [1,2,1,3,1,2,1] | 1 |
| 2 | [2,1,2,1,2,2,1] | 2 |

예시설명

예시 #1
1번부터 3번까지의 후보 3명이 있으며, 투표 결과는 [1, 2, 1, 3, 1, 2, 1]입니다.
총 투표 수는 7표이며, 1번 후보가 4표, 2번 후보가 2표, 3번 후보가 1표씩 받았습니다.
이 경우, 1번 후보가 과반수를 득표하였으므로 1을 return 합니다.

예시 #2
1번부터 2번까지의 후보 2명이 있으며, 투표 결과는 [2, 1, 2, 1, 2, 2, 1]입니다.
총 투표 수는 7표이며, 1번 후보는 3표, 2번 후보는 4표를 받았습니다.
이 경우, 2번 후보가 과반수를 득표하였으므로 2를 return 합니다.

문제 코드

def solution(n, votes):
    arr = [0] * (n + 1)
    for vote in votes:
        arr[vote] += 1

    for i in range(1, n+1):
        if arr[i] > n/2:
            return i
    return -1

풀이

def solution(n, votes):
    arr = [0] * (n + 1)
    
    # 후보자별 득표수 구하기
    for vote in votes:
        arr[vote] += 1
        
    # 과반수를 득표한 후보자 return
    for i in range(1, n+1):
        if arr[i] > len(votes)/2:
            return i
    return -1

댓글