본문 바로가기
JAVA 코딩 알고리즘 연습/프로그래머스

프로그래머스 - 최빈값 구하기 / JAVA (자바) 코딩 알고리즘 연습

by easpop 2022. 12. 15.
728x90
반응형
반응형

생각보다 어렵게 풀었다ㅜㅜㅜ

단순 최빈값만 구하는게 아니라 고려해야될게 많아서 오래 걸린듯..

최빈값을 리턴하지만 최빈값이 여러개 있을때는 -1을 리턴 해야되고 구글링 하면서 알아낸 사실이지만 테스트 케이스에는 숫자 0이 없어서 테스트는 계속 통과됐지만 채점해보면 계속 오류가 떴음..

로직을 간단히 설명하면 아래와 같다.

1. array 배열에 들어온 숫자 최대값을 구한다.

2. 최대값보다 1이 큰 배열 길이로 카운트 배열 생성 (숫자 0을 포함시키기 위해).

3. 카운트 배열에 인덱스 별로 array 배열의 숫자 카운트

4. for 문을 돌려서 최대값을 구한후 answer에 넣어서 리턴

5. count 배열에 최대값이 중복되는 경우 체크

6. 최대값이 같은게 있을 경우 -1을 answer에 담아서 리턴

 

class Solution {
    public int solution(int[] array) {
        int answer = 0;
        int length = 0; //카운트 배열 길이 구하기
		
		for (int i = 0; i < array.length; i++) {
			if(array[i]>length) {
				length = array[i];
			}
		}
		
		int[] cnt_arr = new int[length+1];
		
		for (int i = 0; i < array.length; i++) { //카운트 배열에 카운트 횟수 추가
			cnt_arr[array[i]]++;
		}
		
		int max = 0; //최대값 리턴
		
		for (int i = 0; i < cnt_arr.length; i++) {
			if(cnt_arr[i] > max) {
				max = cnt_arr[i];
				answer = i;
			}
		}
        
		
		int check = 0; //count 최대값이 같은게 있는지 중복 개수 체크
		for (int i = 0; i < cnt_arr.length; i++) {
			if(max == cnt_arr[i]) {
				check++;
			}
		}
		
		if(check != 1) { //최대값이 같은게 여러개 있을 경우 -1 리턴
			answer = -1;
		}
        
        return answer;
    }
}
728x90
반응형

댓글