본문 바로가기

Algorithm/Implementation

(C++) - 백준(BOJ) 11637 : 인기 투표

반응형

https://www.acmicpc.net/problem/11637

 

11637번: 인기 투표

각 테스트 케이스는 첫 번째 줄부터 순서대로 출력된다. 최다 득표자가 과반수 득표를 했을경우에는 "majority winner R", 절반 이하의 득표를 하였을 경우엔 "minority winner R"가 되며, 최다 득표자가 없

www.acmicpc.net

조건에 따른 구현문제였습니다.

📕 풀이방법

📔 입력 및 초기화

1. test case 수 t, test case당 후보자 수 n, 전체 투표 수 totalVote, 최다 투표수 maxVote, 각 후보자의 투표수를 저장할 vector candidates, 최다 득표 후보자 번호를 저장할 vector majorCandidate를 선언한 후 적절히 입력받습니다.2. 매 test case마다 적절히 초기화해줍니다.3. 후보자 당 투표수를 입력받을 때마다 totalVote, 최대 투표수 maxVote에 값을 갱신해 저장합니다.

📔 풀이과정

모든 후보자를 확인하는 for loop를 수행합니다.

최대 투표수에 해당하는 후보자의 번호를 majorCandidate에 push_back해줍니다.

📔 정답출력

조건에 따라 정답을 출력합니다.


📕 Code

#include <bits/stdc++.h>
using namespace std;

int t, n, totalVote, maxVote;
vector <int> candidates, majorCandidate;

int main(){
    cin >> t;
    while(t--){

        cin >> n;
        totalVote = 0, maxVote = 0;
        candidates.resize(n);
        majorCandidate.clear();

        for(int i = 0; i < n; i++) {
            cin >> candidates[i];
            totalVote += candidates[i];
            maxVote = max(maxVote, candidates[i]);
        }

        for(int i = 0; i < n; i++)
            if(candidates[i] == maxVote) 
                majorCandidate.push_back(i+1);

        if(majorCandidate.size() > 1) cout << "no winner\n";
        else if(totalVote / 2 < maxVote) cout << "majority winner " << majorCandidate[0] << '\n';
        else cout << "minority winner " << majorCandidate[0] << '\n';
    }
}