프로그래머스(Level 0) - 🌝 최빈값 구하기

Gammi·2022년 12월 25일
0

프로그래머스

목록 보기
17/69

✔ 문제






✔ 풀이


class Solution {
  public int solution(int[] array) {
    int answer = 0, maxCount = 0;
    int[] sub_arr = new int[1001];
    
    for(int i = 0; i < array.length; i++) {
      sub_arr[array[i]]++;
    }
    
    for(int i = 0; i < sub_arr.length; i++) {
      if(maxCount == sub_arr[i]) {
        answer = -1;
      }else if(maxCount < sub_arr[i]){
        maxCount = sub_arr[i];
        answer = i;
      }
    }
    
    return answer;
  }
}



🔗 보충

길이가 1001인 배열을 만든 이유


  • 문제에서 array 원소의 크기가 0부터 1000까지라고 해서 배열의 자리를 1001까지 만들었음

    -> 인덱스는 0 ~ n-1까지이기 때문에


  • 이렇게 만든 배열로 카운팅 배열을 사용해서 문제를 풀었다. 카운팅 배열은 따로 정리할 예정!

    -> sub_arr[array[i]]++;




if문 보충 설명


  1. maxCount보다 sub_arr[i]의 값이 크면 maxCount에 sub_arr[i] 값을 대입

  2. for문으로 반복하면서 더 큰 숫자가 나올 경우 maxCount의 값도 더 큰 수로 바뀜

  3. 제일 숫자가 큰(제일 많이 나왔던(=최빈값)) sub_arr[i] 값이 최종 maxCount가 됨

  4. sub_arr의 인덱스 번호와 실제 배열(array)의 원소 값이 같기 때문에 i값이 최빈값이 됨



int[] array = {1,2};와 같이 최빈값이 없는 경우


  1. sub_arr[1]에 1 값이 들어가 있기 때문에 maxCount는 sub_arr[1]이 된다

  2. for문으로 sub_arr[2]와 비교했을 때 sub_arr[2]의 값도 1이므로 true 조건을 만족하게 됨

  3. 따라서 -1 리턴

profile
개발자가 되었어요⭐️

0개의 댓글