반응형
최빈값
실행코드
import java.util.\*;
class Solution {
public int solution(int\[\] array) {
int answer = 0;
int max = 0;
Arrays.sort(array);
max = array\[array.length -1\];
int count \[\] = new int\[max + 1\];
for (int i = 0; i< array.length; i++) {
count\[array\[i\]\]++;
}
max = count\[0\];
for(int i = 1; i < count.length; i++) {
if(max < count\[i\]){
max = count\[i\];
answer = i;
} else if (max == count\[i\]){
answer = -1;
}
}
return answer;
}
}
코드분석
int answer = 0; , int max = 0;
결과값을 저장하는 answer 변수와 배열에서 최댓값을 저장하는 max 변수를 선언 및 초기화
Arrays.sort(array);
입력배열 array를 정렬합니다. 이렇게 배열 내의 순자들이 오름차순으로 정렬되며, 중복된 숫자를 빠르게 찾을 수 있게 됩니다.
max = array \[array.length -1\];
정렬된 배열에서 가장 큰 값을 max 변수에 저장합니다. 이 값은 숫자의 범위를 나타냅니다.
int count \[\] = new int \[max + 1\];
각 숫자가 몇 번 등장하는지 저장하기 위한 배열은 선언하며 배열의 크기는 max값에 1을 더한 값이 됩니다.
for문
array를 몇 번 순회하며 각 숫자의 등장 횟수를 count에 기록합니다.
max = count \[0\];
가장 많이 등장한 숫자의 등장 횟수를 저장하는 max 변수를 초기화합니다.
for 루프
count 배열을 순회하며 가장 많이 등장한 숫자를 찾습니다.
answer 변수
저장된 값을 반환합니다. 자주 나타나는 숫자를 나타내며 중복이 있을 때는 -1을 출력합니다.
다른 사람이 푼 코드 예제
import java.util.*;
class Solution {
public int solution(int[] array) {
int maxCount = 0;
int answer = 0;
Map<Integer, Integer> map = new HashMap<>();
// getOrDefault : 찾는 키가 존재한다면 찾는 키의 값을 반환하고 없다면 기본 값을 반환하는 메서드
// getPrDefault(Object key, V DefaultValue)
// 매개변수 : 이 메서드는 두개의 매개변수를 허용
// key : 값을 가져와야 하는 요소의 키
// defaultValue : 지정된 키로 매핑된 값이 없는 경우 반환되어야 하는 기본값
// 반환값 : 찾는 key가 존재하면 해당 key에 매핑되어 있는 값을 반환하고, 그렇지 않으면 디폴트 값이 반환
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;
}
}
728x90
'알고리즘' 카테고리의 다른 글
배열 뒤집기 (0) | 2023.09.20 |
---|---|
배열 두 배 만들기 (0) | 2023.09.20 |
몫 구하기 (0) | 2023.09.19 |