최빈값

김성수·2023년 6월 4일
0

알고리즘

목록 보기
26/28

들어가면서

알고리즘 최빈값 문제를 풀면서 발생했던 시행착오와 해결 과정을 기록한다.


최빈값이란?

최빈값이 무엇이냐?

배열 안에서 가장 많이 등장하는 값을 반환해준다.

예를 들어

1, 1, 3, 3, 3, 4

라는 배열이 있을 때

3이 최빈 값이 된다.

왜냐하면 3이 3개이기 때문이다.


나는 이 문제를 풀이할 때 map을 사용했었는데,

최빈값을 구할 때 실수로 key 값으로 비교를 해가지고, key 값이 가장 큰 경우를 반환해버리는 일이 발생했다.


이 사실을 인지하는데 아주 오랜 시간이 걸렸다.. 후...


예를 들어

1, 1, 44, 44, 5,5,5

배열에서 5가 최빈 값이 되어야 하는데

44를 반환해버리는 불상사가 발생했다.


이 문제는 아래 코드에서 발생했다.

int max = 0;
for (int x : array) {
            map.put(x, map.getOrDefault(x, 0) + 1);
            int mapGet = map.get(x);
            if(mapGet > max){ // 여기서 문제 발생
                max = x;
            }
        }

위 코드를 아래와 같이 수정해주면 된다.

int max = 0;
int maxCount = 0;
for (int x : array) {
            map.put(x, map.getOrDefault(x, 0) + 1);
            int mapGet = map.get(x);
            if(mapGet > maxCount){ // 여기서 문제 발생
            	maxCount = mapGet;
                max = x;
            }
        }

전체 코드는 아래와 같다.

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

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

        int max = 0;
        int maxCount = 0;

        for (int x : array) {
            map.put(x, map.getOrDefault(x, 0) + 1);
            int mapGet = map.get(x);
            if(mapGet > max){
//                maxCount = mapGet;
                max = x;
            }
        }

        int cnt = 0;

        for(int x : map.values()){
            if(x == map.get(max)){
                cnt++;
            }
        }

        if(cnt > 1){
            return -1;
        }

        answer = max;

        return answer;
    }



알게된 점

최빈값의 개념을 알게되었다.

profile
깊이 있는 소프트웨어 개발자가 되고 싶습니다.

0개의 댓글