새소식

Programmers Coding Test/Java

[프로그래머스 120812] Java - 코딩테스트 입문 / 최빈값 구하기

  • -

 

 

최빈값 구하기

 

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/120812

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

1)  문제

최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 
정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 
최빈값이 여러 개면 -1을 return 합니다.a
제한사항
0 < array의 길이 < 100
0 ≤ array의 원소 < 1000

 

 

 

2)  예시

 

 

Result Table
array result
[1, 2, 3, 3, 3, 4] 3
[1, 1, 2, 2] -1
[1] 1

 

 

 

입출력 예 #1
[1, 2, 3, 3, 3, 4]에서 1은 1개 2는 1개 3은 3개 4는 1개로 최빈값은 3입니다.


입출력 예 #2
[1, 1, 2, 2]에서 1은 2개 2는 2개로 최빈값이 1, 2입니다. 최빈값이 여러 개이므로 -1을 return 합니다.


입출력 예 #3
[1]에는 1만 있으므로 최빈값은 1입니다.

 

 

 

 

 

3)  풀이

 

 

1. 클래스 선언을 해줍니다

● class Solution {

클래스명은 대문자로 시작해야하고, 정답이라는 의미로 Solution이라는 단어를 사용하였습니다.

 

 

 

 

2. 메소드 선언을 해줍니다.

● public int solution (int[] array){

정수배열 array를 매개변수로 사용하는 solution 메소드를 선언해줍니다.

메소드의 결과값인 solution은 정수값이 나오므로, 데이터 타입을 int로 해줍니다.

 

 

 

 

3. 배열 길이에 대한 제한사항을 확인하고, 만족하지 않는다면 예외처리합니다.

       if(array.length <0 || array.length>100) {
            throw new IllegalArgumentException("배열 길이는 0 초과 100 미만입니다");
        }

 

 

 

 

4. array 배열에 있는 원소들의 빈도수를 구한 배열 count를 구합니다.

우선 array의 원소는 0이상 1000 미만의 1000개의 숫자이므로, count는 1000개의 크기를 가진 배열로 생성합니다.

array의 i가 0부터 array 배열의 길이까지 반복하며

나온 number 값에 해당하는 인덱스의 count 배열 값을 1씩 증가시킵니다.

결과적으로 정수 0에서 999까지의 빈도수가 모두 기록된 1000개의 크기를 가진 정수배열 count가 완성됩니다.

     int[] count = new int[1000];

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

 

예)  array[3] 이 502이고, array[61] 이 502라면, count[502]가 두번 나왔으므로 2가 됩니다.

 

 

 

 

5. 최빈값이 여러개일 때는 -1을 반환해야하므로, result= -1 선언해줍니다.

그리고 최빈값 maxFrequency는 우선 0으로 초기화하여 생성해줍니다.

count배열을 순회하며, j번 원소가 최빈값보다 크면 그 값을 최빈값이 되도록하고, 결과는 최빈값이 된 정수가 되게합니다.만약 count배열을 순회하다가 이전에 나왔던 최빈값과 같은 수가 나온다면, 더이상 순회할 필요없이 -1을 반환하면 되게됩니다.

 

      int result = -1;
        int maxFrequency = 0;

        for (int j = 0; j < count.length; j++) {
            if (count[j] > maxFrequency) {
                result = j;
                maxFrequency = count[j];
            } else if (count[j] == maxFrequency && maxFrequency > 0) {
                result = -1;
            }
        }

        return result;
    }
}

 

 

 

 

4)  코드

 

class Solution {
    public int solution (int[] array){
        
        if(array.length <0 || array.length>100) {
            throw new IllegalArgumentException("배열 길이는 0 초과 100 미만입니다");
        }
        
         int[] count = new int[1000];

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

        int result = -1;
        int maxFrequency = 0;

        for (int j = 0; j < count.length; j++) {
            if (count[j] > maxFrequency) {
                result = j;
                maxFrequency = count[j];
            } else if (count[j] == maxFrequency && maxFrequency > 0) {
                result = -1;
            }
        }

        return result;
    }
}

 

 

 

 

 

 

 

 

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.