코딩테스트

코테 Lv0 - 최빈값 구하기

Beekei 2024. 11. 8. 11:11
반응형

문제 설명

최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 

정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 

최빈값이 여러 개면 -1을 return 합니다.

제한사항

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

입출력 예

입출력 예 #1

Input : [1, 2, 3, 3, 3, 4] / Output : 3

더보기
더보기

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

입출력 예 #2

Input : [1, 1, 2, 2] / Output : -1

더보기
더보기

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

입출력 예 #3

Input : [1] / Output : 1

더보기
더보기

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

제출코드

  1. 주어진 배열을 key는 배열의 원소값, value는 해당 원소값의 중복 개수인 Map으로 변환합니다.
  2. 중복 개수(value)가 가장 많은(max) 원소값을 구합니다.
  3. 해당 원소값의 중복 개수와 같은 다른 원소값이 있을때(fileter) -1을 반환합니다.
import java.util.Arrays;
import java.util.Comparator;
import java.util.Map;
import java.util.Objects;
import java.util.function.Function;
import java.util.stream.Collectors;

class Solution {
    public int solution(int[] array) {
        Map<Integer, Integer> map = Arrays.stream(array)
            .boxed()
            .collect(Collectors.toMap(Function.identity(), i -> 1, Integer::sum));
        return map.keySet().stream()
            .max(Comparator.comparingInt(map::get))
            .filter(key -> map.values().stream()
                .filter(value -> value == map.get(key))
                .count() <= 1)
            .orElse(-1);
    }
}

제한 사항에서 배열의 길이가 100개 미만이라 상관없지만 원소의 개수가 엄청나게 많을 경우 스트림을 많이 사용해 성능이 안좋아지는 문제가 있으니 참고해주세요!


출처 : https://school.programmers.co.kr/learn/courses/30/lessons/120812#qna

 

프로그래머스

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

programmers.co.kr

 

반응형