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