PS/프로그래머스 입문 100제

[프로그래머스] LV.0 최빈값 구하기 - 자바 [89/100]

yaho!! 2024. 7. 5. 15:37

💬 문제 설명

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

 

🚫 제한 사항

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

 

📢 입출력 예

 

👨‍🏫 입출력 예 설명

 

📃 제출 코드

import java.util.*;

class Solution {
    public int solution(int[] array) {
        int answer = 0;
        Map<Integer, Integer> map = new HashMap();
        
        for (int i : array) {
            map.put(i, map.getOrDefault(i, 0) + 1);
        }
        
        int maxValue = Integer.MIN_VALUE;
        for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
            if (entry.getValue() > maxValue)  {
                maxValue = entry.getValue();
                answer = entry.getKey();
            } else if (entry.getValue() == maxValue) {
                answer = -1;
            }
        }
        
        return answer;
    }
}

 

✏ 해결방법 & 배운점

Map에 빈도수 저장

  • `array`의 각 요소를 순회하면서 `map`에 요소를 키로 저장하고 해당 요소의 빈도수를 값으로 저장하였습니다.
  • `getOrDefault()` 메서드를 사용하여 키가 존재하는 경우 기존 값에 1을 더하고, 없는 경우 0에서 1을 더합니다.

최대 빈도수 찾기

  • `map.entrySet()` 메서드를 사용하여 `map`의 모든 키-값 쌍을 순회합니다.
  • 각 요소의 빈도수가 `maxValue` 보다 크다면 `maxValue`를 업데이트 하고 해당 요소의 키를 `answer`에 저장
  • 만약 현재 요소의 빈도수가 maxValue와 같다면, answer를 -1로 설정하여 중복된 최대 빈도수를 처리합니다.