최빈값 구하기

문제


나의 생각

먼저 카운팅을 할 수 있는 배열을 만들고 난 후에, 입력되는 매개변수 기준으로 카운팅을 한다.

카운팅 된 값에서 가장 큰 값을 기준에 있는 인덱스를 가지고 있고, 

가장 큰값을 똑같이 가진 인덱스가 있는지 한번 더 확인한다 라는 생각으로 접근

 


나의 답안

public static int solution(int[] array) {

    int[] a = new int[1000];

    for (int i = 0; i < array.length; i++) {
        a[array[i]]++;
    }

    int answer = 0;
    int max = 0;

    for (int i = 0; i < a.length; i++) {
        if (max < a[i]) {
            answer = i;
            max = a[i];
        }
    }
    int count = 0;
    for (int i = 0; i < a.length; i++) {
        if (max == a[i]) {
            count++;
        }
    }
    return count > 1 ? -1 : answer;
}

다른 답안

초기에 나도 맵 자료구조를 이용한 답안을 준비하다가 값을 가져오는 과정에서 포기하고 for문 방식으로 변경하였는데, 아래 답안은 맵을 이용한 결과를 만들어 답안이다.

map에서 가져올 때 없으면 default 값으로 가져오게 설정하고 아니면 +1을 하여 가져온다. 

그 과정에서 이전에 있던 max 값과 같다면 -1 값을 반환하는 방식이다. 

하지만 여기서 의문점은 count == maxCount 가 같을 때 -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;
    }
}

'Programmers 문제풀이 > Lv.0' 카테고리의 다른 글

삼각형의 완성조건 (2)  (0) 2023.03.07
구슬을 나누는 경우의 수  (0) 2023.03.06
평행  (0) 2023.03.06
문자열 계산하기  (0) 2023.03.06
잘라서 배열로 저장하기  (0) 2023.03.06