본문 바로가기

코딩테스트 예제

프로그래머스 최빈값 구하기

import java.util.*;

class Solution {
    public int solution(int[] array) {
        // 배열의 원소를 오름차순으로 정렬
        Arrays.sort(array);
        
        int maxFreq = 0; // 최대 빈도수
        int mode = -1; // 최빈값
        
        int count = 1; // 현재 원소의 빈도수
        int prev = array[0]; // 이전 원소
        
        for (int i = 1; i < array.length; i++) {
            if (array[i] == prev) { // 현재 원소와 이전 원소가 같을 경우
                count++; // 빈도수 증가
            } else { // 현재 원소와 이전 원소가 다를 경우
                if (count > maxFreq) { // 이전 원소의 빈도수가 최대 빈도수보다 큰 경우
                    maxFreq = count;
                    mode = prev;
                } else if (count == maxFreq) { // 이전 원소의 빈도수가 최대 빈도수와 같은 경우
                    mode = -1;
                }
                
                prev = array[i]; // 이전 원소를 현재 원소로 업데이트
                count = 1; // 빈도수 초기화
            }
        }
        
        // 마지막 원소 처리
        if (count > maxFreq) {
            mode = prev;
        } else if (count == maxFreq) {
            mode = -1;
        }
        
        return mode;
    }
}

코드분석

int maxFreq = 0; // 최대 빈도수를 저장할 변수
    int mode = -1; // 최빈값을 저장할 변수, 최초에는 -1로 초기화합니다.
    
    int count = 1; // 현재 원소의 빈도수를 저장할 변수입니다. 최초에는 1로 초기화합니다.
    int prev = array[0]; // 이전 원소를 저장할 변수입니다. 최초에는 배열의 첫 번째 원소로 초기화합니다.
    
    // 배열의 두 번째 원소부터 끝까지 반복하면서 최빈값을 찾습니다.
    for (int i = 1; i < array.length; i++) {
        if (array[i] == prev) { // 현재 원소와 이전 원소가 같을 경우
            count++; // 빈도수를 증가시킵니다.
        } else { // 현재 원소와 이전 원소가 다를 경우
            if (count > maxFreq) { // 이전 원소의 빈도수가 최대 빈도수보다 큰 경우
                maxFreq = count; // 최대 빈도수를 업데이트합니다.
                mode = prev; // 최빈값을 업데이트합니다.
            } else if (count == maxFreq) { // 이전 원소의 빈도수가 최대 빈도수와 같은 경우
                mode = -1; // 최빈값을 -1로 업데이트합니다.
            }
            
            prev = array[i]; // 이전 원소를 현재 원소로 업데이트합니다.
            count = 1; // 빈도수를 1로 초기화합니다.
        }
    }
    
    // 배열의 마지막 원소를 처리합니다.
    if (count > maxFreq) {
        mode = prev;
    } else if (count == maxFreq) {
        mode = -1;
    }
    
    return mode; // 최빈값을 반환합니다.
}

'코딩테스트 예제' 카테고리의 다른 글

가벼운 코딩 테스트  (0) 2023.04.15
짝수는 싫어요  (0) 2023.04.13
프로그래머스 중앙값 구하기  (0) 2023.04.10
프로그래머스 배열 두 배 만들기  (0) 2023.03.21
프로그래머스 분수의 덧셈  (0) 2023.03.21