[프로그래머스] 코딩테스트 연습 -> 코딩테스트 입문 -> 최빈값 구하기https://school.programmers.co.kr/learn/courses/30/lessons/120812
해결 과정
이 문제,,, 좀 어려웠다....ㅜ
우선, 빈도수를 구하기 위해 array 배열의 원소를 count 배열에 해당하는 인덱스에 넣는 것을 이용한다.
먼저 array 배열에서 가장 큰 값을 구한 후 거기에 1을 더해주면 count 배열의 크기를 설정할 수 있다.
(배열에서 가장 큰 값이 5라고 하면, count배열의 크기는 5+1=6 으로 지정할 수 있다. 이유는 인덱스는 0부터 시작하기 때문. array 배열 에 원소 3이 있다면 이에 해당하는 count 배열의 인덱스는 count[4])
array 배열에서 가장 큰 값을 구하는 방법으로 먼저 오름차순으로 정렬해준 후, 마지막 원소를 max로 초기화한다.
Arrays.sort(array);
int max = array[array.length-1];
그리고 마지막 원소에 1을 더해서 count 배열을 초기화해준다.
int[] count = new int[max+1];
다음으로 반복문을 돌며 array[i]의 값에 해당하는 인덱스를 count[]로++해준다.
다음 최빈값을 찾기 위해 int top을 선언해주고, 반복문을 돌며 top에 최빈값을 찾고 이때 answer을 i로 설정해준다.
만약 top이 count[i] 와 같을 경우에는 최빈값이 여러개인 것이 되므로 answer = -1 을 해준다.
소스 코드
import java.util.Arrays;
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;
}
}
'JAVA > Programmers' 카테고리의 다른 글
JAVA 프로그래머스 [배열의 평균값] 자바 Lv.0 (0) | 2023.05.25 |
---|---|
JAVA 프로그래머스 [나머지 구하기] 자바 Lv.0 (0) | 2023.05.24 |
JAVA 프로그래머스 [중앙값 구하기] 자바 Lv.0 (0) | 2023.05.24 |
JAVA 프로그래머스 [짝수는 싫어요] 자바 Lv.0 (0) | 2023.05.24 |
JAVA 프로그래머스 [숫자 비교하기] 자바 Lv.0 (0) | 2023.05.23 |
댓글