[코테]/[GroomEdu]
[COS PRO 2급] 4차 8번_누가 반장이 될까요 (C/C++)
Sky_
2021. 5. 21. 22:50

주어진 코드
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
int solution(int n, int votes[], int votes_len) {
int arr[101] = { 0, };
for (int i = 0; i < votes_len; i++) {
arr[votes[i]]++;
}
for (int i = 1; i < n + 1; i++)
if (arr[i] > n / 2) //이때 n은 후보의 수 이다.
return i;
return -1;
}
int main() {
int n1 = 3;
int votes1[7] = { 1, 2, 1, 3, 1, 2, 1 };
int votes_len1 = 7;
int ret1 = solution(n1, votes1, votes_len1);
printf("solution 함수의 반환 값은 %d 입니다.\n", ret1);
int n2 = 2;
int votes2[7] = { 2, 1, 2, 1, 2, 2, 1 };
int votes_len2 = 7;
int ret2 = solution(n2, votes2, votes_len2);
printf("solution 함수의 반환 값은 %d 입니다.\n", ret2);
}
완성 코드
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
int solution(int n, int votes[], int votes_len) {
int arr[101] = { 0, };
for (int i = 0; i < votes_len; i++) {
arr[votes[i]]++;
}
for (int i = 1; i < n + 1; i++)
if (arr[i] > votes_len / 2) //과반수는 투표한 인원의 과반수이어야 올바른 값이 나온다.
return i;
return -1;
}
int main() {
int n1 = 3;
int votes1[7] = { 1, 2, 1, 3, 1, 2, 1 };
int votes_len1 = 7;
int ret1 = solution(n1, votes1, votes_len1);
printf("solution 함수의 반환 값은 %d 입니다.\n", ret1);
int n2 = 2;
int votes2[7] = { 2, 1, 2, 1, 2, 2, 1 };
int votes_len2 = 7;
int ret2 = solution(n2, votes2, votes_len2);
printf("solution 함수의 반환 값은 %d 입니다.\n", ret2);
}
n/2를 사용하여 과반수를 계산하면, 후보의 수 사이에서의 과반수를 계산하기 때문에,
올바른 값이 나오기 위해서는 투표를 한 사람, votes_len의 과반수로 계산해야 한다.
n/2 -> votes_len/2
예시
n | vote | vote_len | return | |
예시 1 | 3 | [1, 2, 1, 3, 1, 2, 1] | 7 | 1 |
예시 2 | 2 | [2, 1, 2, 1, 2, 2, 1] | 7 | 2 |
goorm
구름은 클라우드 기술을 이용하여 누구나 코딩을 배우고, 실력을 평가하고, 소프트웨어를 개발할 수 있는 클라우드 소프트웨어 생태계입니다.
www.goorm.io