[JAVA] 프로그래머스(Q120812) : 최빈값 구하기
in Blog / Algorithm / Level 0 on Algorithm, Programmers, Level-0
안녕하세요, 해을입니다🦖
이번 글에서는 프로그래머스 : 최빈값 구하기 문제에 대해 알아보겠습니다!
💡 문제
코딩테스트 연습 > 코딩테스트 입문 > 최빈값 구하기
💡 문제 설명
최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.
💡 제한사항
- 0 < array의 길이 < 100
- 0 ≤ array의 원소 < 1000
💡 입출력 예
| array | result |
|---|---|
| [1, 2, 3, 3, 3, 4] | 3 |
| [1, 1, 2, 2] | -1 |
| [1] | 1 |
💡 입출력 예 설명
입출력 예 #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입니다.
🚩 문제 풀이
이 문제는 배열에서 가장 많이 등장하는 값(최빈값)을 찾아내는 문제입니다.
단, 최빈값이 여러 개인 경우 -1을 반환해야 하므로, 단순히 최대 빈도만 찾는 것보다 한 단계 더 신경 써야 합니다.
✅ HashMap을 활용하여 빈도수 계산
- 빈도수 저장 : 배열을 순회하면서 각 숫자의 빈도를
Map에 기록key: 배열의 원소value: 해당 원소가 등장한 횟수
- 빈도수 계산 :
getOrDefault()를 사용하여 손쉽게 빈도수 계산getOrDefault(key, defaultValue):key가 있는 경우 기존 값을 반환. 없는 경우defaultValue를 반환.
✅ 최빈값 및 횟수 갱신
- 최빈값 갱신 : 현재 숫자의 빈도수(
cnt)가 기존 최대 빈도수(maxCnt)보다 크면, 해당 숫자를 새로운 최빈값(answer)으로 갱신 - 최빈값 여러 개인 경우 : 현재 빈도수가 기존 최대 빈도수와 같다면, 최빈값이 여러 개인 경우이므로 최빈값(
answer)-1로 갱신
🚩 정답 코드
import java.util.*;
class Solution {
public int solution(int[] array) {
Map<Integer, Integer> map = new HashMap<>();
int answer = 0, maxCnt = 0;
for(int num : array){
int cnt = map.getOrDefault(num, 0) + 1;
if(cnt > maxCnt){
answer = num;
maxCnt = cnt;
}else if(cnt == maxCnt){
answer = -1;
}
map.put(num,cnt);
}
return answer;
}
}
오류 및 오타 등 피드백, 질문, 인사 등 무엇이든 언제나 환영입니다!
읽어주셔서 감사합니다.
끝!🦕