[JAVA] 프로그래머스(Q120812) : 최빈값 구하기

안녕하세요, 해을입니다🦖

이번 글에서는 프로그래머스 : 최빈값 구하기 문제에 대해 알아보겠습니다!

💡 문제

코딩테스트 연습 > 코딩테스트 입문 > 최빈값 구하기

💡 문제 설명

최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.

💡 제한사항

  • 0 < array의 길이 < 100
  • 0 ≤ array의 원소 < 1000

💡 입출력 예

arrayresult
[1, 2, 3, 3, 3, 4]3
[1, 1, 2, 2]-1
[1]1

💡 입출력 예 설명

입출력 예 #1

  • [1, 2, 3, 3, 3, 4]에서 1은 1개 2는 1개 3은 3개 4는 1개로 최빈값은 3입니다.

입출력 예 #2

  • [1, 1, 2, 2]에서 1은 2개 2는 2개로 최빈값이 1, 2입니다. 최빈값이 여러 개이므로 -1을 return 합니다.

입출력 예 #3

  • [1]에는 1만 있으므로 최빈값은 1입니다.

🚩 문제 풀이

이 문제는 배열에서 가장 많이 등장하는 값(최빈값)을 찾아내는 문제입니다.

단, 최빈값이 여러 개인 경우 -1을 반환해야 하므로, 단순히 최대 빈도만 찾는 것보다 한 단계 더 신경 써야 합니다.

HashMap을 활용하여 빈도수 계산

  • 빈도수 저장 : 배열을 순회하면서 각 숫자의 빈도를 Map에 기록
    • key : 배열의 원소
    • value : 해당 원소가 등장한 횟수
  • 빈도수 계산 : getOrDefault()를 사용하여 손쉽게 빈도수 계산
    • getOrDefault(key, defaultValue) : key가 있는 경우 기존 값을 반환. 없는 경우 defaultValue를 반환.

최빈값 및 횟수 갱신

  • 최빈값 갱신 : 현재 숫자의 빈도수(cnt)가 기존 최대 빈도수(maxCnt)보다 크면, 해당 숫자를 새로운 최빈값(answer)으로 갱신
  • 최빈값 여러 개인 경우 : 현재 빈도수가 기존 최대 빈도수와 같다면, 최빈값이 여러 개인 경우이므로 최빈값(answer) -1로 갱신

🚩 정답 코드

import java.util.*;

class Solution {
    public int solution(int[] array) {
        Map<Integer, Integer> map = new HashMap<>();
        int answer = 0, maxCnt = 0;
        
        for(int num : array){
            int cnt = map.getOrDefault(num, 0) + 1;
            if(cnt > maxCnt){
                answer = num;
                maxCnt = cnt;
            }else if(cnt == maxCnt){
                answer = -1;
            }
            map.put(num,cnt);
        }
        
        return answer;
    }
}

오류 및 오타 등 피드백, 질문, 인사 등 무엇이든 언제나 환영입니다!

읽어주셔서 감사합니다.

끝!🦕


© 2022. Haeeul All rights reserved.

🐾해을의 개발자국🐾

Powered by Hydejack v9.1.5