언유상씨의 건전한 취미생활

[백준 알고리즘] 인기 투표(11637) C++로 풀기 본문

건전한 취미생활 - 알고리즘

[백준 알고리즘] 인기 투표(11637) C++로 풀기

언유상 2020. 5. 15. 21:14

문제 이름 : 인기 투표

문제 번호 : 11637

사용 언어 : C++

 

문제는 다음과 같다.

 

각 후보들의 득표수를 모두 더하면서,

동시에 가장 많은 표를 받은 후보의 번호와 받은 표의 수를 비교하면서 진행한다.

마지막에 가장 많은 표를 받은 후보가 몇명인지를 계산하여,

여러명의 후보가 최다 득표자인 경우를 처리한다.

 

이번 문제 역시도 시간이 넉넉해서 풀기에 어렵지 않은 문제였다.

 

 

소스 코드는 다음과 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <utility>
#include <cmath>
 
using namespace std;
 
int main() {
    ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
    int n, num, pyo, big_idx;
    
    cin >> n;
    for (int i = 0; i < n; i++) { // 테스트 개수
        cin >> num;
        int sum = 0, big_chk = 0, big = 0;
        int* p = (int*)malloc(num * sizeof(int));
        for (int j = 0; j < num; j++) { // 득표 확인
            cin >> pyo;
            p[j] = pyo;
            sum += pyo;
            if (big <= pyo) { // 최다 득표자와 그 인덱스 확인
                big = pyo;
                big_idx = j;
            }
        }
        for (int k = 0; k < num; k++) { // 제일 큰 원소가 몇개 있는지 확인
            if (p[k] == big) {
                big_chk++;
            }
            
        }if (big_chk >= 2) { // 최다 득표자가 없는 경우
            printf("no winner\n");
        }
 
        if (sum / big < 2 && big_chk < 2) { // 과반수 이상의 득표를 받은 경우
            printf("majority winner %d\n", big_idx + 1);
        }
        else if (sum / big >= 2 && big_chk < 2) { // 과반수 이상이 아닌 경우
            printf("minority winner %d\n", big_idx + 1);
        }
    }
    return 0;
}
cs

 

제출해보면

Comments