📑 1. 문제설명

💡 2. 접근방식
이 문제는 해시맵을 사용해서 풀었다.
- 배열을 순회하면서 각 숫자의 등장 횟수를 카운트해서 해시맵에 저장한다. (key: 등장한 숫자, value: 카운트)
- 해시맵을 순회하면서 최빈값을 찾는다. → maxCount보다 더 큰 count(value 값)이 존재하면 maxCount를 count로 업데이트 한다.
- 이 과정에서 등장 횟수가 동일한 값이 있는지도 탐색한다. 만약 중복된 최빈값이 있으면 isDuplicate를 true로 바꾼다. 최종적으로 삼항연산자를 써서 중복이 있으면 -1을 반환, 그렇지 않으면 최빈값을 반환한다.
⭐ 3. 정답코드
import java.util.HashMap;
import java.util.Map;
class Solution {
public int solution(int[] array) {
Map<Integer, Integer> frequencyMap = new HashMap<>();
int maxCount = 0;
int mode = -1;
boolean isDuplicate = false;
// 각 숫자의 등장 횟수 저장하기
for (int num : array) {
frequencyMap.put(num, frequencyMap.getOrDefault(num, 0) + 1);
}
/*
if (frequencyMap.containsKey(num)) {
frequencyMap.put(num, frequencyMap.get(num) + 1);
} else {
frequencyMap.put(num, 1);
}
*/
// 최빈값 찾기
for (Map.Entry<Integer, Integer> entry : frequencyMap.entrySet()) {
int key = entry.getKey();
int count = entry.getValue();
if (count > maxCount) {
maxCount = count;
mode = key;
isDuplicate = false; // 새로운 최빈값 나오면 중복 해제
} else if (count == maxCount) {
isDuplicate = true; // 최빈값이 여러개인 경우
}
}
return isDuplicate ? -1 : mode;
}
}
✅ 배열에서 각 숫자의 등장 횟수를 카운트해서 해시맵에 저장하는 코드
frequencyMap.put(num, frequencyMap.getOrDefault(num, 0) + 1);
`frequencyMap → HashMap<Integer, Integer>`
숫자(num)별 등장 횟수를 저장한다.
`getOrDefault(num, 0)` 는 num이 frequencyMap에 존재하면 해당 값을 가져온다. 그리고 기존 값에 1을 더해 등장 횟수를 증가시킨다. 자가 해시맵에 존재하지 않으면 0을 기본 카운트값으로 설정한다.
원래는 아래처럼 containsKey()를 사용해서 구현하는데 getOrDefault 메서드를 쓰면 코드가 줄어든다.
if (frequencyMap.containsKey(num)) {
frequencyMap.put(num, frequencyMap.get(num) + 1);
} else {
frequencyMap.put(num, 1);
}
✅ 해시맵(HashMap)에 저장된 데이터를 하나씩 꺼내는 for-each문
for (Map.Entry<Integer, Integer> entry : frequencyMap.entrySet()) {
int key = entry.getKey();
int count = entry.getValue();
}
`frequencyMap.entrySet()` 이 부분은 HashMap의 모든 (키, 값) 쌍을 Set<Map.Entry<K, V>> 형태로 반환하는 코드이다.
Map.Entry<Integer, Integer> entry에 entrySet()이 반환하는 각 (키, 값) 쌍을 하나의 entry 객체로 저장한다.
(entry는 Map.Entry<K, V> 타입이고, K는 키, V는 값)
- entry.getKey() → 현재 entry의 키(key) 값을 가져오기
- entry.getValue() → 현재 entry의 값(value) 을 가져오기
만약에 해시맵이{1=2, 2=3, 3=1} 이라면 각 순회별로, 첫번째는 키: 1, 밸류: 2, 두번째는 2, 3 세 번째는 3, 1 이렇게 가져 온다.
'Algorithm > JAVA테스트' 카테고리의 다른 글
[프로그래머스] (Java) 배열의 평균값, 옷가게 할인 받기, 아이스 아메리카노 , 나이 출력, 배열 뒤집기 문제풀이 (6) | 2025.03.10 |
---|---|
[프로그래머스] (Java) 피자 나눠 먹기 (1), (2), (3) (6) | 2025.03.10 |
[프로그래머스] (Java) 안전지대 문제풀이 (21) | 2025.03.05 |
[리트코드] LeetCode Longest Common Prefix (Easy) in Java (23) | 2025.02.22 |
[프로그래머스] (Java) 카드뭉치 (큐) (6) | 2025.02.20 |
📑 1. 문제설명

💡 2. 접근방식
이 문제는 해시맵을 사용해서 풀었다.
- 배열을 순회하면서 각 숫자의 등장 횟수를 카운트해서 해시맵에 저장한다. (key: 등장한 숫자, value: 카운트)
- 해시맵을 순회하면서 최빈값을 찾는다. → maxCount보다 더 큰 count(value 값)이 존재하면 maxCount를 count로 업데이트 한다.
- 이 과정에서 등장 횟수가 동일한 값이 있는지도 탐색한다. 만약 중복된 최빈값이 있으면 isDuplicate를 true로 바꾼다. 최종적으로 삼항연산자를 써서 중복이 있으면 -1을 반환, 그렇지 않으면 최빈값을 반환한다.
⭐ 3. 정답코드
import java.util.HashMap; import java.util.Map; class Solution { public int solution(int[] array) { Map<Integer, Integer> frequencyMap = new HashMap<>(); int maxCount = 0; int mode = -1; boolean isDuplicate = false; // 각 숫자의 등장 횟수 저장하기 for (int num : array) { frequencyMap.put(num, frequencyMap.getOrDefault(num, 0) + 1); } /* if (frequencyMap.containsKey(num)) { frequencyMap.put(num, frequencyMap.get(num) + 1); } else { frequencyMap.put(num, 1); } */ // 최빈값 찾기 for (Map.Entry<Integer, Integer> entry : frequencyMap.entrySet()) { int key = entry.getKey(); int count = entry.getValue(); if (count > maxCount) { maxCount = count; mode = key; isDuplicate = false; // 새로운 최빈값 나오면 중복 해제 } else if (count == maxCount) { isDuplicate = true; // 최빈값이 여러개인 경우 } } return isDuplicate ? -1 : mode; } }
✅ 배열에서 각 숫자의 등장 횟수를 카운트해서 해시맵에 저장하는 코드
frequencyMap.put(num, frequencyMap.getOrDefault(num, 0) + 1);
frequencyMap → HashMap<Integer, Integer>
숫자(num)별 등장 횟수를 저장한다.
getOrDefault(num, 0)
는 num이 frequencyMap에 존재하면 해당 값을 가져온다. 그리고 기존 값에 1을 더해 등장 횟수를 증가시킨다. 자가 해시맵에 존재하지 않으면 0을 기본 카운트값으로 설정한다.
원래는 아래처럼 containsKey()를 사용해서 구현하는데 getOrDefault 메서드를 쓰면 코드가 줄어든다.
if (frequencyMap.containsKey(num)) { frequencyMap.put(num, frequencyMap.get(num) + 1); } else { frequencyMap.put(num, 1); }
✅ 해시맵(HashMap)에 저장된 데이터를 하나씩 꺼내는 for-each문
for (Map.Entry<Integer, Integer> entry : frequencyMap.entrySet()) { int key = entry.getKey(); int count = entry.getValue(); }
frequencyMap.entrySet()
이 부분은 HashMap의 모든 (키, 값) 쌍을 Set<Map.Entry<K, V>> 형태로 반환하는 코드이다.
Map.Entry<Integer, Integer> entry에 entrySet()이 반환하는 각 (키, 값) 쌍을 하나의 entry 객체로 저장한다.
(entry는 Map.Entry<K, V> 타입이고, K는 키, V는 값)
- entry.getKey() → 현재 entry의 키(key) 값을 가져오기
- entry.getValue() → 현재 entry의 값(value) 을 가져오기
만약에 해시맵이{1=2, 2=3, 3=1} 이라면 각 순회별로, 첫번째는 키: 1, 밸류: 2, 두번째는 2, 3 세 번째는 3, 1 이렇게 가져 온다.
'Algorithm > JAVA테스트' 카테고리의 다른 글
[프로그래머스] (Java) 배열의 평균값, 옷가게 할인 받기, 아이스 아메리카노 , 나이 출력, 배열 뒤집기 문제풀이 (6) | 2025.03.10 |
---|---|
[프로그래머스] (Java) 피자 나눠 먹기 (1), (2), (3) (6) | 2025.03.10 |
[프로그래머스] (Java) 안전지대 문제풀이 (21) | 2025.03.05 |
[리트코드] LeetCode Longest Common Prefix (Easy) in Java (23) | 2025.02.22 |
[프로그래머스] (Java) 카드뭉치 (큐) (6) | 2025.02.20 |