문제 설명
최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.
제한사항
- 0 < array의 길이 < 100
- 0 ≤ array의 원소 < 1000
입출력 예
입출력 설명
입출력 예 #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입니다.
코드
import java.util.*;
class Solution {
public int solution(int[] array) {
int answer = 0;
int max = 0; // 최빈값이 나온 횟수
if(array.length == 1) { // array의 길이가 1이면
answer = array[0]; // answer에 array의 첫 번째 값 넣어주기
} else {
// num과 해당 숫자가 등장한 횟수를 매치하여 저장하기 위해 HashMap을 이용
Map<Integer, Integer> map = new HashMap<>();
for(int num : array) { // array만큼 반복
int count = map.getOrDefault(num, 0) + 1; // num이 있으면 이에 해당하는 값 불러와 +1, 아니라면 default값인 0 주기
if(count > max) { // count가 max보다 크면
max = count; // count를 max에 할당
answer = num; // answer에 최빈값 넣기
} else if(count == max) { // count와 max가 같으면
answer = -1; // 최빈값이 여러 개이기 때문에 answer에 -1 할당
}
map.put(num, count); // map에 key, value 추가
}
}
return answer;
}
}
풀이
max는 array에 있는 최빈값의 갯수이고, array 의 갯수가 1이면 값이 하나밖에 없는 것이기 때문에 유일하게 존재하는 값이 최빈값이 된다. 그렇기 때문에 array의 길이가 1일 경우, answer에 array의 0번째 값을 넣어준다.
array의 길이가 1이 아니면 foreach문을 이용해 array만큼 반복하고 HashMap을 이용해 key와 그에 해당하는 value를 저장한다.
map.getOrDefault(num, 0) + 1; 은 map에 num이라는 키가 존재한다면 그에 맞는 value를 가져와 +1을, 존재하지 않는다면 default 값인 0을 값으로 준다는 의미로, 이것을 count라는 변수에 넣어준다.
그렇게 얻은 count와 max를 비교해 count가 더 크다면 max값을 바꿔주고, answer에 최빈값인 num을 넣어준다.
만약, count와 max 값이 같다면 최빈 값이 여러 개인 것이므로 answer에 -1을 넣는다.
이러한 과정을 통해 얻은 num, count는 put()을 이용해 map에 추가하고, for문이 끝나면 answer를 리턴한다.
'Coding Test' 카테고리의 다른 글
230921 가위 바위 보 - Level 0 (0) | 2023.09.21 |
---|---|
230921 문자열 뒤집기 - Level 0 (0) | 2023.09.21 |
230920 배열 뒤집기 - Level 0 (0) | 2023.09.20 |
230920 배열 두 배 만들기 - Level 0 (0) | 2023.09.20 |
230919 몫 구하기 - Level 0 (0) | 2023.09.19 |