프로그래머스/JAVA/최빈값 구하기

Seoung Young Oh·2022년 12월 23일
0

프로그래머스

목록 보기
66/105
post-thumbnail

문제설명

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

제한사항

  • 0 < array의 길이 < 100
  • 0 ≤ array의 원소 < 1000

입출력 예

arrayresult
[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입니다.

풀이

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

참고

0개의 댓글

관련 채용 정보