본문 바로가기
CodeSignal

Elections Winners

by Doromi 2024. 1. 1.
728x90
반응형

선거가 진행 중일 때, 아직 투표하지 않은 유권자 수와 각 후보에게 투표된 득표수가 주어졌을 때, 아직 승리할 수 있는 후보의 수를 찾는 문제입니다.

후보가 이기려면 다른 어떤 후보보다도 더 많은 투표를 받아야 하며, 만약 최다 득표 후보가 여러 명이라면 아무도 승리하지 못한 것으로 간주합니다.

예를 들어, 주어진 예시에서는 투표수가 [2, 3, 5, 2]이고, 아직 투표하지 않은 유권자가 3명(k = 3)입니다. 각 후보의 득표수를 봤을 때, 두 번째 후보가 승리할 수 있는데, 이는 나머지 후보들이 3명의 투표를 모두 받아도 최다 득표자인 5에 미치지 못하기 때문입니다. 따라서 이 경우 정답은 2입니다.

int solution(int[] votes, int k) {
     int max = votes.Max();
     int count = 0;
     int max_count = 0;
     foreach(int vote in votes){
         if(max-vote < k) count++;
         if(max == vote) max_count++;
     }
     if(k == 0 && max_count == 1) count++;
     return count;
}
int max = votes.Max();: 주어진 투표 배열에서 최대 득표수를 찾습니다.
int count = 0;: 승리할 수 있는 후보의 수를 세기 위한 변수를 초기화합니다.
int max_count = 0;: 최대 득표수를 가진 후보의 수를 세기 위한 변수를 초기화합니다.
foreach(int vote in votes) { ... }: 투표 배열을 반복하면서 아래의 과정을 수행합니다.
if(max - vote < k) count++;: 각 후보에 대해 최대 득표수에서 현재 득표수를 뺀 값이 k보다 작거나 같다면, 해당 후보는 승리할 수 있는 후보입니다. count를 증가시킵니다.
if(max == vote) max_count++;: 최대 득표수를 가진 후보에 대해서 max_count를 증가시킵니다.
if(k == 0 && max_count == 1) count++;: 만약 k가 0이고, 최대 득표수를 가진 후보가 1명이라면 그 후보는 승리할 수 있습니다. 따라서 count를 1 증가시킵니다.
최종적으로 count를 반환합니다.

이 코드의 주요 아이디어는 각 후보에 대해 최대 득표수와의 차이가 k 이하인 후보는 승리할 수 있는 후보로 간주하는 것입니다. 또한, 최대 득표수를 가진 후보의 수를 max_count로 계산하여 k가 0이고 최대 득표수를 가진 후보가 1명이면 그 후보는 승리할 수 있는 것으로 간주합니다.
728x90
반응형

'CodeSignal' 카테고리의 다른 글

lineEncoding  (0) 2024.01.04
Is MAC48 Address?  (0) 2024.01.03
buildPalindrome  (0) 2023.12.31
isBeautifulString  (0) 2023.12.31
Bishop and Pawn  (0) 2023.12.30