본문 바로가기

Algorithm/Programers - Java

[프로그래머스(Java)] 최빈값 구하기 / sort

 

Level. 0

 

문제

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

* 제한사항
- 0 < array의 길이 < 100
- 0 ≤ array의 원소 < 1000

 

풀이

import java.util.Arrays;

class Solution {
    public int solution(int[] array) {
        int answer = 0;
        int[][] counts = new int[1001][2];
        int maxn = 0;
        
        for(int i=0; i<array.length; i++){
            counts[array[i]][0] = array[i];
            counts[array[i]][1] += 1;
        }

        Arrays.sort(counts, (o1, o2) -> {
            return o2[1]!=o1[1] ? o2[1]-o1[1] : o2[0]-o1[0]; // 두번째값기준 내림차순, 첫번째값기준 내림차순
            // return o1[0]!=o2[0] ? o1[0]-o2[0] : o1[1]-o2[1]; // 첫번째 기준 오름차순
        });

        if(counts[0][1] == counts[1][1]) return -1;
        
        return counts[0][0];
    }
}

 

  1. 0 ≤ array의 원소 < 1000라는 조건이 있으므로, 1001크기의 2차원 배열을 만든다.
    배열의 첫번째 값은 원소의 값이고, 두 번째 값은 빈도이다.
  2. 두 번째 값 기준으로 내림차순 정렬한다. 정렬된 배열은 counts이다. 
  3. counts[0][1] == counts[1][1] d일 경우 최빈값이 여러 개라는 의미이므로 -1을 반환한다. 

 


다른 풀이

import java.util.*;
class Solution {
    public int solution(int[] array) {
        int maxCount = 0;
        int answer = 0;

        Map<Integer, Integer> map = new HashMap<>();

        for(int number : array) {
            int count = map.getOrDefault(number, 0) + 1;

            if(count > maxCount) {
                maxCount = count;
                answer = number;
            }

            else if(count == maxCount) {
                answer = -1;
            }

            map.put(number, count);
        }

        return answer;
    }
}

 


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

 

프로그래머스

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

programmers.co.kr