본문 바로가기
  • Let's study
PS/Programmers

[프로그래머스 Lv.0] 최빈값 구하기(Java)

by 코딩고수이고파 2026. 7. 18.

문제

https://school.programmers.co.kr/learn/courses/30/lessons/120812

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

풀이

먼저 각 숫자가 몇 번 등장했는지 저장하기 위해 빈도 배열을 만든다.

문제에서 배열의 원소는 0 이상 999 이하이므로 크기가 1000인 배열을 생성한다.

int[] mode = new int[1000];

이후 입력 배열을 한 번 순회하면서 각 숫자의 등장 횟수를 증가시킨다.

for (int i = 0; i < array.length; i++) {
    mode[array[i]]++;
}

그다음 mode 배열을 순회하면서 가장 많이 등장한 숫자를 찾는다.

if (max < mode[i]) {
    answer = i;
    max = mode[i];
    cnt = 1;
}
  • max : 현재까지의 최대 등장 횟수
  • answer : 최빈값
  • cnt : 최대 등장 횟수를 가진 숫자의 개수

더 큰 등장 횟수를 발견하면 최빈값과 최대 등장 횟수를 갱신하고, cnt를 1로 초기화한다.

반대로 최대 등장 횟수와 같은 값이 또 나오면 cnt를 증가시킨다.

else if (max == mode[i]) {
    cnt++;
}

모든 탐색이 끝난 후 cnt가 2 이상이라면 최빈값이 여러 개라는 의미이므로 -1을 반환한다.

if (cnt > 1)
    answer = -1;

 

코드

class Solution {
    public int solution(int[] array) {
        int answer = 0;
        int cnt = 1, max=0;
        int[] mode=new int[1000];
        
        for(int i=0;i<array.length;i++){
            mode[array[i]]++;
        }
        
        for(int i=0;i<mode.length;i++){
            if(max<mode[i]){
                answer=i;
                max=mode[i];
                cnt=1;
            }
            else if(max==mode[i])
                cnt++;
        }
        
        if(cnt>1)
            answer=-1;
        
        return answer;
    }
}

댓글