코딩테스트/프로그래머스

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

블로그 주인장 2024. 3. 31.

문제 링크

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 설명

최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 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

 

 

입출력 예 설명

  1. 입출력 예 #1 
    • [1, 2, 3, 3, 3, 4]에서 1은 1개 2는 1개 3은 3개 4는 1개로 최빈값은 3입니다. 
  2. 입출력 예 #2 
    • [1, 1, 2, 2]에서 1은 2개 2는 2개로 최빈값이 1, 2입니다. 최빈값이 여러 개이므로 -1을 return 합니다. 
  3. 입출력 예 #3 
    • [1]에는 1만 있으므로 최빈값은 1입니다.

 

코드 구현

import java.util.*;

class Solution {
    public int solution(int[] array) {
        int count = 0;
        int answer = 0;

        Map<Integer, Integer> map = new HashMap<>();
        for (int ints : array) {
            map.put(ints, map.getOrDefault(ints, 0) + 1);
        }

        int max = Collections.max(map.values());
        for (Map.Entry<Integer, Integer> m : map.entrySet()) {
            if (m.getValue() == max) {
                count++;
                answer = m.getKey();
            }
        }


        return count > 1 ? -1 : answer;
    }
}

 

풀이

  1. array에 있는 인덱스의 값과 동일한 값의 카운트를 알기 위해서 HashMap을 사용합니다.
  2. for문을 활용하여 map에 (인덱스, 카운트) 형태로 값을 넣어줍니다.
  3. map에 있는 value의 값의 최대값을 max 라는 변수에 넣어줍니다.
  4. for문을 활용하여 max의 값과 동일한 value인 경우에 count에 +1을 해주고, answer에 해당 key 값을 넣어줍니다.
  5. count가 1보다 큰 경우, 여러개 이기 때문에 -1로 반환하고, 해당하지 않을 경우에는 answer의 값을 반환해줍니다.
반응형

댓글