본문 바로가기

프로그래머스(Java)/Level 0

[프로그래머스] 최빈값 구하기

728x90

코드 힌트

  1. HashMap 사용하기
    • HashMap은 키-값 쌍으로 데이터를 저장하는 자료구조입니다. 각 키는 유일해야 하며, 값을 저장할 수 있습니다. 빠른 조회가 가능하여 데이터 접근 속도가 빠릅니다.
  2. getOrDefault로 카운트하기
    • getOrDefault를 사용하여, 해당 키가 없을 경우 기본값으로 0을 설정합니다.
    • map.getOrDefault(n, 0)은 n의 값이 없을 때 0을 반환합니다.
  3. map.keySet() 사용하기
    • map.keySet()은 HashMap의 모든 키를 반환하는 메서드입니다.
    • 이 키들을 리스트로 변환하여 사용할 수 있습니다.
  4. keySet.sort()하기
    • keySet.sort((o1, o2) -> map.get(o2).compareTo(map.get(o1))) 사용
    • 값의 크기를 기준으로 내림차순으로 정렬합니다.
    • 오름차순 정렬은 map.get(o1).compareTo(map.get(o2))) 입니다.
  5. 조건에 따라 처리하기
    • 조건에 따른 처리: 최빈값이 하나인지, 여러 개인지에 따라 반환값을 다르게 합니다.

 


정답은 더보기 클릭

더보기
import java.util.*;

class Solution {
    public int solution(int[] array) {
        // 1. HashMap 사용하기
        HashMap<Integer, Integer> map = new HashMap<>();
        
        // 2. getOrDefault로 카운트하기
        for (int n : array) {
            map.put(n, map.getOrDefault(n, 0) + 1);
            // map.merge(n, 1, Integer::sum);
        }
        
        // 3. map.keySet() 사용하기
        List<Integer> keySet = new ArrayList<>(map.keySet());
        
        // 4. keySet.sort()하기
        keySet.sort((o1, o2) -> map.get(o2).compareTo(map.get(o1)));
        
        // 5. 조건에 따라 처리하기
        // size가 1이라면 바로 리턴
        // 이 조건이 없다면 else if 절에 있는 조건에서 IndexOutOfBoundsException 에러 발생
        if (keySet.size() == 1) {
            return keySet.get(0);
        }
        
        // 최빈값이 여러개 일 때 -1 리턴
        else if (map.get(keySet.get(0)) == map.get(keySet.get(1))) {
            return -1;
        }
        
        // 최빈값 리턴
        return keySet.get(0);
    }
}
728x90