반응형
문제 설명
최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.
제한사항
- 0 < array의 길이 < 100
- 0 ≤ array의 원소 < 1000
입출력 예
array | result |
[1, 2, 3, 3, 3, 4] | 3 |
[1, 1, 2, 2] | -1 |
[1] | 1 |
소스코드
Solution.c
#include <stdio.h>
#include <stdbool.h>
// array_len은 배열 array의 길이입니다.
int count[1001] = { 0, };
int solution(int array[], size_t array_len) {
int i, max = -1, answer, b = 0;
for (i = 0; i < array_len; i++) {
if (max < ++count[array[i]]) {
max = cnt[answer = array[i]];
}
}
for (i = 1; i < 1e3; i++) {
if (cnt[i] != 0 && count[i] == max) {
if (b != 0)
return -1;
b = 1;
}
}
return answer;
}
풀이
우선 counting 정렬. 즉, 계수 정렬을 이용하여 입력된 배열들의 각 숫자들이 몇 번씩 출현하는지 세준 다음 최빈값의 반복 횟수가 같은 숫자가 둘 이상이면 두 번째 for문에서 -1을 출력해주고 그게 아니라 최빈값의 반복 횟수가 같은 것이 없다면 최빈값을 출력하게 해 준다.
한마디
이번 문제가 가장 오래 고민하고 검색하며 찾아볼 정도로 어려웠던 것 같다. 아직 갈길이 먼데 벌써 고비가 한번와버렸으니 앞으로 더 열심히 해야겠다는 생각을 하게 되었다. 이번 프로그래머스 정답이 c언어는 없었던 것 같던데 이 자료가 다른 사람에게도 공부할 기회가 되었으면 좋겠다.
출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges