본문 바로가기
Coding Test/Java Coding Test

[프로그래머스 / 자바] - 최빈값 구하기

by nam_ji 2024. 9. 30.

최빈값 구하기 - LV.0

문제

  • 정수 배열 array가 매개변수로 주어집니다.
  • 최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다.
  • 최빈값을 출력하는 문제입니다.
  • 최빈값이 여러 개면 -1을 return 합니다.


테스트 (인텔리제이)

  • Arrays 클래스의 sort 메서드로 array 변수를 정렬시켜줍니다.
  • 이후  array의 원소 중에서 같은 값이 몇개 있는지 카운트 해줄 정수 배열 count를 선언하고 크기는 array의 마지막 원소 만큼의 크기로 선언해줍니다.
  • 이제 향상 for문으로 array의 원소를 하나씩 꺼내도록 하고 count의 인덱스 번호를 array의 원소 번호로 하고 해당 원소를 1증가하도록 해줍니다. (array의 원소를 인덱스로 사용하여 카운팅 한다면 array의 원소가 몇개인지 확인할 수 있습니다.)
  • 이제 여기서 가장 큰 값 또는 큰 값 중에서 2개 이상인지를 확인하기 위해 for문으로 count의 원소를 비교할 수 있도록 count 크기 만큼 반복하도록 설정해줍니다.
  • 그 전에 count의 가장 많이 나온 원소를 찾기 위해 정수 max를 선언하고 해당 변수에 count의 원소 아무거나 하나를 담아 초기화 해줍니다.
  • for문에는 if문으로 count의 원소가 max보다 크면 max에 count원소를 저장하게 하고 해당 인덱스 값이 최빈값이 되기 때문에 answer에 인덱스 값을 저장해줍니다.
  • else if에는 max가 count원소와 일치하면 (max값이 2개 이상) answer에 -1을 담도록 하여 해결했습니다.
package com.namji.codingtest;

import java.util.Arrays;

public class 최빈값_구하기 {
  public static void main(String[] args) {
    /*
    정수 배열 array가 매개변수로 주어집니다.
    최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다.
    최빈값을 출력하는 문제입니다.
    최빈값이 여러 개면 -1을 return 합니다.

    제한사항
    0 < array의 길이 < 100
    0 ≤ array의 원소 < 1000

    입출력 예
    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입니다.
     */
    int[] array = {1, 1, 2, 2, 3, 3};
    Arrays.sort(array);
    int[] count = new int[array[array.length-1] + 1];
    int answer = 0;

    for (int j : array) {
      count[j]++;
    }
    int 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;
      }
    }

    System.out.println(answer);
  }
}

프로그래머스 코드

import java.util.*;

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