๐ 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 ์ด๋ ๊ฒ ๊ฐ์ ธ ์จ๋ค.