본문 바로가기
JAVA/Programmers

JAVA 프로그래머스 [최빈값 구하기] 자바 Lv.0

by tripleup 2023. 5. 24.
728x90
반응형

[프로그래머스] 코딩테스트 연습 -> 코딩테스트 입문 -> 최빈값 구하기https://school.programmers.co.kr/learn/courses/30/lessons/120812


해결 과정

 

이 문제,,, 좀 어려웠다....ㅜ

 

우선, 빈도수를 구하기 위해 array 배열의 원소를 count 배열에 해당하는 인덱스에 넣는 것을 이용한다.

 

먼저 array 배열에서 가장 큰 값을 구한 후 거기에 1을 더해주면 count 배열의 크기를 설정할 수 있다.

(배열에서 가장 큰 값이 5라고 하면, count배열의 크기는 5+1=6 으로 지정할 수 있다. 이유는 인덱스는 0부터 시작하기 때문. array 배열 에 원소 3이 있다면 이에 해당하는 count 배열의 인덱스는 count[4])

 

array 배열에서 가장 큰 값을 구하는 방법으로 먼저 오름차순으로 정렬해준 후, 마지막 원소를 max로 초기화한다.

 

Arrays.sort(array);

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

 

그리고 마지막 원소에 1을 더해서 count 배열을 초기화해준다.

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

 

다음으로 반복문을 돌며 array[i]의 값에 해당하는 인덱스를 count[]로++해준다.

 

다음 최빈값을 찾기 위해 int top을 선언해주고, 반복문을 돌며 top에 최빈값을 찾고 이때 answer을 i로 설정해준다.

만약 top이 count[i] 와 같을 경우에는 최빈값이 여러개인 것이 되므로 answer = -1 을 해준다.

 

소스 코드

 

import java.util.Arrays;

class Solution {
    public int solution(int[] array) {
        int answer = 0;
        
        Arrays.sort(array);
        int max = array[array.length-1];
        int[] count = new int[max+1];
        
        for (int i = 0; i<array.length; i++) {
                count[array[i]] ++;
        }
        
        int top = count[0];
        
        for (int i=1; i<count.length; i++) {
            if (top < count[i]) {
                top = count[i];
                answer = i;
            }else if (top == count[i]) {
                answer = -1;
            }      
        }
        return answer;
    }
}

 


 

728x90
반응형

댓글