Level. 0
문제
최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다.
정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요.
최빈값이 여러 개면 -1을 return 합니다.
* 제한사항
- 0 < array의 길이 < 100
- 0 ≤ array의 원소 < 1000
풀이
import java.util.Arrays;
class Solution {
public int solution(int[] array) {
int answer = 0;
int[][] counts = new int[1001][2];
int maxn = 0;
for(int i=0; i<array.length; i++){
counts[array[i]][0] = array[i];
counts[array[i]][1] += 1;
}
Arrays.sort(counts, (o1, o2) -> {
return o2[1]!=o1[1] ? o2[1]-o1[1] : o2[0]-o1[0]; // 두번째값기준 내림차순, 첫번째값기준 내림차순
// return o1[0]!=o2[0] ? o1[0]-o2[0] : o1[1]-o2[1]; // 첫번째 기준 오름차순
});
if(counts[0][1] == counts[1][1]) return -1;
return counts[0][0];
}
}
- 0 ≤ array의 원소 < 1000라는 조건이 있으므로, 1001크기의 2차원 배열을 만든다.
배열의 첫번째 값은 원소의 값이고, 두 번째 값은 빈도이다. - 두 번째 값 기준으로 내림차순 정렬한다. 정렬된 배열은 counts이다.
- counts[0][1] == counts[1][1] d일 경우 최빈값이 여러 개라는 의미이므로 -1을 반환한다.
다른 풀이
import java.util.*;
class Solution {
public int solution(int[] array) {
int maxCount = 0;
int answer = 0;
Map<Integer, Integer> map = new HashMap<>();
for(int number : array) {
int count = map.getOrDefault(number, 0) + 1;
if(count > maxCount) {
maxCount = count;
answer = number;
}
else if(count == maxCount) {
answer = -1;
}
map.put(number, count);
}
return answer;
}
}
https://school.programmers.co.kr/learn/courses/30/lessons/120812
'Algorithm > Programers - Java' 카테고리의 다른 글
[프로그래머스(Java)] 분수의 덧셈 / 유클리드 호제법 (0) | 2023.10.14 |
---|---|
[프로그래머스(Java)] 다음에 올 숫자 (0) | 2023.10.12 |
[프로그래머스(Java)] OX퀴즈 (0) | 2023.10.10 |
[프로그래머스(Java)] 코드 처리하기 (0) | 2023.10.10 |
[프로그래머스(Java)] 한 번만 등장한 문자 / Collectors.groupingBy(), Collectors.joining() (1) | 2023.10.09 |