문제설명
최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.
제한사항
입출력 예
array | result |
---|---|
[1, 2, 3, 3, 3, 4] | 3 |
[1, 1, 2, 2] | -1 |
[1] | 1 |
입출력 예 설명
입출력 예 #1
입출력 예 #2
입출력 예 #3
풀이
1.기본 배열에서 중복을 제거한 배열을 얻는다.
2.등장 빈도를 기록할 배열을 생성하고 반복문으로 등장횟수를 기록한다.
3.최대등장횟수와 최빈수의 인덱스를 얻는다.
4.최빈수가 중복되는지 확인 할 변수를 만든다.
5.최빈수가 중복될 경우(duplication>1) -1을 리턴하고,
그렇지 않을경우 중복이 제거된 배열에 최빈수 인덱스(maxIndex) 값을 넣고
그 값(number[maxIndex])을 리턴한다.
import java.util.Arrays;
import java.util.stream.IntStream;
class Solution {
public int solution(int[] array) {
int[] number = Arrays.stream(array).distinct().toArray();
//중복이 제거된 배열을 얻음
int[] count = new int[number.length];
//빈도를 카운트할 배열생성
for (int i = 0; i < number.length; i++) {
for (int j = 0; j < array.length; j++) {
if (number[i] == array[j]) {
count[i]++;
}
}
}
//빈도 카운드
int max = Arrays.stream(count).max().getAsInt();
//최대 등장횟수
int maxIndex = IntStream.range(0, count.length)
.filter(i-> count[i]==max).findFirst().orElse(-1);
//최빈수의 인덱스
int duplication = (int)Arrays.stream(count)
.filter(x -> x==max).count();
//최빈수의 중복여부 확인
if(duplication>1) {
return -1;
}else {
return number[maxIndex];
}
}
}
참고