최빈값 구하기 (자바) v2

김재현·2024년 4월 18일
0

알고리즘 풀이

목록 보기
71/90

문제

반년 전에 풀었던 문제이고, 포스팅 했었다. >링크<
하지만 다시 풀려니 예전과 같이 복잡하게 푸는법밖에 떠오르지 않았다.

그래서 다른 사람의 풀이를 컨닝하고 내 풀이에 적용시켜보았다.

정답 코드

import java.util.*;

class Solution {
    public int solution(int[] array) {
        int answer = 0;
        
        int max=0;
        
        Map<Integer,Integer> map = new HashMap<>();
        
        for(int i=0;i<array.length;i++) {
            map.put(array[i], map.getOrDefault(array[i],0)+1);
            if (map.get(array[i]) > max) {
                max=map.get(array[i]);
                answer=array[i];
            } else if(map.get(array[i]) == max) {
                answer = -1;
            }
        }
        
        return answer;
    }
}

이전에는 이렇게 저렇게 복잡하게 풀이했지만,
이번에는 for 문 하나에서 끝낼 수 있게 풀었다.

우선 map을 사용하여 각각의 숫자를 카운팅하며
동시에 그 숫자가 최빈값인지 max로 확인한다. 만약 그 값이 최빈값이라면 answer에 그 값을 넣어놓는다.

최빈값이 2개 이상이라면 answer이 -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;
    }
}

이분이 사용한 Map, getOrDefault(), 'for문 한번에 모두 해결하는 것'을 내 풀이에도 적용시켰다.
컨닝 이후라 그런지 내 풀이가 더 직관적으로 보인다.

profile
I live in Seoul, Korea, Handsome

0개의 댓글