최빈값 구하기

SeungJoo
|2023. 9. 19. 19:10
728x90

최빈값

실행코드

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


        Arrays.sort(array);  
        max = array\[array.length -1\];          

        int count \[\] = new int\[max + 1\];  
        for (int i = 0; i< array.length; i++) {  
            count\[array\[i\]\]++;  
        }  
        max = count\[0\];           
        for(int i = 1; i < count.length; i++) {  
            if(max < count\[i\]){  
                max = count\[i\];  
                answer = i;  
            } else if (max == count\[i\]){  
                answer = -1;  
            }  
        }  

        return answer;  
    }  
}

코드분석

int answer = 0; , int max = 0;

결과값을 저장하는 answer 변수와 배열에서 최댓값을 저장하는 max 변수를 선언 및 초기화

Arrays.sort(array);

입력배열 array를 정렬합니다. 이렇게 배열 내의 순자들이 오름차순으로 정렬되며, 중복된 숫자를 빠르게 찾을 수 있게 됩니다.

max = array \[array.length -1\];

정렬된 배열에서 가장 큰 값을 max 변수에 저장합니다. 이 값은 숫자의 범위를 나타냅니다.

int count \[\] = new int \[max + 1\];

각 숫자가 몇 번 등장하는지 저장하기 위한 배열은 선언하며 배열의 크기는 max값에 1을 더한 값이 됩니다.

for문

array를 몇 번 순회하며 각 숫자의 등장 횟수를 count에 기록합니다.

max = count \[0\];

가장 많이 등장한 숫자의 등장 횟수를 저장하는 max 변수를 초기화합니다.

for 루프

count 배열을 순회하며 가장 많이 등장한 숫자를 찾습니다.

answer 변수

저장된 값을 반환합니다. 자주 나타나는 숫자를 나타내며 중복이 있을 때는 -1을 출력합니다.

다른 사람이 푼 코드 예제

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

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

        // getOrDefault : 찾는 키가 존재한다면 찾는 키의 값을 반환하고 없다면 기본 값을 반환하는 메서드
        // getPrDefault(Object key, V DefaultValue)
        // 매개변수 : 이 메서드는 두개의 매개변수를 허용
        // key : 값을 가져와야 하는 요소의 키
        // defaultValue : 지정된 키로 매핑된 값이 없는 경우 반환되어야 하는 기본값
        // 반환값 : 찾는 key가 존재하면 해당 key에 매핑되어 있는 값을 반환하고, 그렇지 않으면 디폴트 값이 반환

        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;
    }
}
728x90

'알고리즘' 카테고리의 다른 글

배열 뒤집기  (0) 2023.09.20
배열 두 배 만들기  (0) 2023.09.20
몫 구하기  (0) 2023.09.19