
Problem ๐ป
์ต๋น๊ฐ์ ์ฃผ์ด์ง ๊ฐ ์ค์์ ๊ฐ์ฅ ์์ฃผ ๋์ค๋ ๊ฐ์ ์๋ฏธํฉ๋๋ค.
์ ์ ๋ฐฐ์ด array๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ์ต๋น๊ฐ์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด๋ณด์ธ์. ์ต๋น๊ฐ์ด ์ฌ๋ฌ ๊ฐ๋ฉด -1์ return ํฉ๋๋ค.
Approach 1 โ
- ๋ฐฐ์ด์์ ์ค๋ณต๋ ์๊ฐ ์ด๋ค๊ฒ์ธ์ง ๊ณจ๋ผ๋ด๊ธฐ
- ์ค๋ณต๋ ์๊ฐ ๋ช ๊ฐ์ธ์ง ์ค๋ฆ์ฐจ์์ผ๋ก ์์ ๋งค๊ธฐ๊ธฐ.
- ์์ ์ค ์ต๋ค์ธ 1์๊ฐ ์ค๋ณต์ด๋ผ๋ฉด -1 ๋์ถํ๊ธฐ.
์ผ๋จ ๋๋ ๋ฐฐ์ด์์ ์ค๋ณต๋ ์๋ฅผ ๊ณจ๋ผ๋ด๋ ๋ฒ์ ๋ชจ๋ฅธ๋ค.
์ค๋ณต๋ ์๋ฅผ ๊ณจ๋ผ๋ธ๋ค๊ณ ํ๋๋ผ๋ ๊ทธ ์ค ์ค๋ณต๋ ๊ฐฏ์๊ฐ ์ต๋ค์ธ ๊ฒ๋ ๊ณจ๋ผ๋ด์ง ๋ชปํ๋ค.
๋, ๊ฐฏ์๊ฐ ์ต๋ค์ธ ๊ฒ์ด ๋จ์์ธ์ง ๋ณต์์ธ์ง๋ ๊ตฌ๋ถํ์ง ๋ชปํ๋ค.
๋ณต์๋ผ๋ฉด -1์ ๋์ถํด์ผ ํ๋ ๋ฒ๋ ๋ชจ๋ฅธ๋ค.
Approach 2 โญ
- ๋ฐฐ์ด์์ ์ค๋ณต๋ ์๊ฐ ์ด๋ค๊ฒ์ธ์ง ๊ณจ๋ผ๋ด๊ธฐ
2.์ค๋ณต๋ ์๊ฐ ๋ช ๊ฐ์ธ์ง ์ค๋ฆ์ฐจ์์ผ๋ก ์์ ๋งค๊ธฐ๊ธฐ.
3.์์ ์ค ์ต๋ค์ธ 1์๊ฐ ์ค๋ณต์ด๋ผ๋ฉด -1 ๋์ถํ๊ธฐ.
๋์ ์ ๊ทผ๋ฒ์ ์ฌ๋ฐ๋ฅธ ๋ฐฉ๋ฒ์ด์ง๋ง ์๋ฐ ๊ฐ๋ ์ด ๋ถ์กฑํ๋ค.
1๋จ๊ณ: ๋ฐฐ์ด์์ ์ค๋ณต๋ ์ ๊ณจ๋ผ๋ด๊ธฐ
๋ฐฐ์ด์ ์๋ ์ซ์๋ฅผ ํ๋์ฉ ์ดํด๋ณด๋ฉด์, ๊ฐ์ ์ซ์๊ฐ ๋ช ๋ฒ ๋์ค๋์ง ์ธ๋ ๋ฒ์
HashMap์ ์ฌ์ฉํด์ผ ํ๋ค.
HashMap :
๋ฐฐ์ด์ ๊ฐ ์์๋ง๋ค ์ค๋ณต๋๋ ๊ฐฏ์๋ฅผ ๋ฐ๋ก ์์ ์ง์ง์ด์ ํ๊ธฐํ๋ ๋ฒ.
ํด์ฌ๋งต์ '๋จ์ด์ฅ' ๊ฐ์ ์ญํ ์ ํ๋๋ฐ
์ซ์(ํค)์ ํด๋น ์ซ์๊ฐ ๋์จ ํ์(๊ฐ)๋ฅผ ๊ธฐ๋กํ๋ค.
์๋ฅผ ๋ค์ด :
์ซ์ 1์ด ๋์ค๋ฉด "1:1๋ฒ"์ด๋ผ๊ณ ๊ธฐ๋ก
์ซ์ 2๊ฐ ๋์ค๋ฉด "2:1๋ฒ"์ผ๋ก ์์ํ๊ณ , ๋ค์ ๋์ค๋ฉด "2:2๋ฒ"์ผ๋ก ์
๋ฐ์ดํธ!
- getOrDefault()๋ผ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํด ์ซ์๊ฐ ์ฒ์ ๋์ค๋ฉด 0๋ฒ์์ ์์ํ๋๋ก ๋์์ค๋ค. -
(๋ค์ ์์ธํ ๋ฌธ๋ฒ ์ค๋ช ์ ํ๊ฒ ์ง๋ง ()์์ ์ฒซ๋ฒ์งธ๋ ์์์ ์ซ์. ๋๋ฒ์งธ๋ ์์์ ์ซ์๊ฐ ์ง๊ธ๊ป ํ๋ฒ๋ ์๋์๋ค๋ฉด ๋๋ฒ์งธ ์์๋ก ์ง์ด ๋งค๊ฒจ์ง๋ ๊ฒ์ด๋ค. ์ฌ๊ธฐ์๋ 0์ ๋๋ฒ์งธ์ ๋ฃ์ด์ ์ง๊ธ๊ป ์๋์จ ์ฒซ๋ฒ์งธ๋ 0๊ณผ ์ง์ง์ด์ ธ์ ํ๊ธฐ๋๋ค. )
2๋จ๊ณ: ์ค๋ณต๋ ์๋ฅผ ๋น๋(ํ์)์์๋ก ์ ๋ฆฌ
์ค๋ณต๋ ์ซ์์ ํ์๊ฐ ๊ธฐ๋ก๋ ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ณ , ์ด๋ค ์ซ์๊ฐ ๊ฐ์ฅ ๋ง์ด ๋์๋์ง ์ฐพ๋๋ค.
์๋ฅผ ๋ค์ด, {1: 1๋ฒ, 2:2๋ฒ, 3:1๋ฒ}์ด๋ผ๋ฉด:
2๊ฐ ๊ฐ์ฅ ๋ง์ด ๋์๋ค.
์๋ฐ์์๋ HashMap์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ํ๋์ฉ ๊บผ๋ด์ ๋น๊ตํ๋ค.
๊ฐ์ฅ ํฐ ์ซ์๋ฅผ ์ฐพ์๋ด๊ธฐ ์ํด, maxFrequency๋ผ๋ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ค.
์ซ์์ ๊ทธ ์ซ์๊ฐ ๋์จ ํ์๋ฅผ ๋น๊ตํ๋ฉด์ ๊ธฐ๋ก์ ์
๋ฐ์ดํธํ๋ค.
์๋ฅผ ๋ค์ด:
์ฒซ ๋ฒ์งธ๋ก ๋ณด๋ฉด 1: 1๋ฒ -> maxFrequency = 1
๋ ๋ฒ์งธ๋ก ๋ณด๋ฉด 2: 2๋ฒ -> maxFrequency = 2
์ธ ๋ฒ์งธ๋ก ๋ณด๋ฉด 3: 1๋ฒ -> maxFrequency = 2 (๋ณํ ์์)
3๋จ๊ณ: ์ต๋น๊ฐ์ด ์ฌ๋ฌ ๊ฐ์ธ์ง ํ์ธ
๊ฐ์ฅ ๋ง์ด ๋์จ ์ซ์๊ฐ ํ๋์ธ์ง ์ฌ๋ฌ ๊ฐ์ธ์ง ํ์ธํ๋ค.
๋ง์ฝ ์ต๋น๊ฐ์ด ์ฌ๋ฌ ๊ฐ๋ผ๋ฉด ๊ฒฐ๊ณผ๋ -1๋ก ํ๋ค.
์ต๋น๊ฐ๊ณผ ๊ฐ์ ๋น๋๋ฅผ ๊ฐ์ง ์ซ์๊ฐ ๋ ๊ฐ ์ด์์ธ์ง ํ์ธํ๊ธฐ ์ํด ์นด์ดํฐ ๋ณ์๋ฅผ ์ถ๊ฐํ๋ค.
if (freq == maxFrequency) ์กฐ๊ฑด์ ํตํด, ์ต๋น๊ฐ๊ณผ ๊ฐ์ ๋น๋๋ฅผ ๊ฐ์ง ์ซ์๋ฅผ ์ธ์ด๋ณธ๋ค.
์ต๋น๊ฐ์ด ์ฌ๋ฌ ๊ฐ์ธ ๊ฒฝ์ฐ, ๋ฐ๋ก -1์ ๋ฐํํ๋ค.
ํ์ํ ์๋ฐ ๊ฐ๋
- ๋ฐฐ์ด :
์ซ์๋ฅผ ์ฌ๋ฌ ๊ฐ ์ ์ฅํ ์ ์๋ ๋๊ตฌ.
์: {1, 2, 2, 3}์ ์ซ์ 4๊ฐ๊ฐ ๋ฐฐ์ด์ ๋ค์ด ์๋ ๋ชจ์ต - HashMap:
๋จ์ด์ฅ์ ์๊ฐํ๋ฉด๋๋ค.
ํค์ ๊ฐ์ ์ ์ฅํ๋ ๋๊ตฌ์ด๋ค. -- ๋ ๊ฐ์ ์ ๋ณด ์์๋ฅผ ์ง์ง๋ ๋ฐฉ๋ฒ.
ํค: ์ฐพ๊ณ ์ถ์ ์ซ์.
๊ฐ: ํด๋น ์ซ์๊ฐ ๋์จ ํ์. - for-each๋ฌธ:
๋ฐฐ์ด์ด๋ HashMap ์์ ์๋ ๋ฐ์ดํฐ๋ฅผ ํ๋์ฉ ๊บผ๋ด๋ ๋ฐฉ๋ฒ
java
for(int num : array) {
// array ์์ ์๋ ์ซ์ num์ ํ๋์ฉ ๊บผ๋
}
- ์กฐ๊ฑด๋ฌธ:
if๋ฅผ ์ฌ์ฉํด ์กฐ๊ฑด์ ํ์ธํ๊ณ ํ๋์ ๊ฒฐ์ ํ๋ค.
java
if (freq > maxFrequency) {
maxFrequency = freq;
mode = key;
}
์ด if๋ฌธ์ ์ต๋น๊ฐ(๊ฐ์ฅ ๋ง์ด ๋์จ ์ซ์)์ ์ฐพ๊ธฐ ์ํ ์กฐ๊ฑด๋ฌธ์ด๋ค.
freq์ maxFrequency๋ฅผ ๋น๊ตํ์ฌ ํ์ฌ ์ซ์๊ฐ ๋ ๋ง์ด ๋์จ ๊ฒฝ์ฐ ์ต๋น๊ฐ์ ์
๋ฐ์ดํธํ๋ ๋ก์ง์ด๋ค.
1) freq :
ํ์ฌ ์ซ์(key)์ ๋น๋์ด๋ค. HashMap์์ ๊ฐ์ ธ์จ ๊ฐ์ผ๋ก, ํน์ ์ซ์๊ฐ ์ง๊ธ๊น์ง ๋ช ๋ฒ ๋์๋์ง ๋ํ๋ธ๋ค.
2) maxFrequency :
์ง๊ธ๊น์ง ํ์ธํ ์ซ์๋ค ์ค ๊ฐ์ฅ ๋์ ๋น๋๋ฅผ ๊ธฐ๋กํ ๋ณ์์ด๋ค.
์ฆ, ํ์ฌ๊น์ง ๋ฐ๊ฒฌ๋ ์ต๋น๊ฐ์ ๋น๋์ด๋ค.
3) mode :
ํ์ฌ๊น์ง์ ์ต๋น๊ฐ(์ซ์)๋ฅผ ๊ธฐ๋กํ ๋ณ์์ด๋ค.
mode๋ ์ต์ข
์ ์ผ๋ก ๊ฐ์ฅ ์์ฃผ ๋์จ ์ซ์๋ฅผ ๋ฐํํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค.
4) key :
ํ์ฌ ๋น๊ต ์ค์ธ ์ซ์์ด๋ค.
HashMap์ ํค(Key)๋ ๋ฐฐ์ด์ ๊ฐ ์ซ์๋ฅผ ๋ํ๋ธ๋ค.
<์กฐ๊ฑด๋ฌธ ํด์>
1. if (freq > maxFrequency) :
ํ์ฌ ์ซ์(key)์ ๋น๋(freq)๊ฐ ์ง๊ธ๊น์ง ๊ธฐ๋ก๋ ์ต๋ ๋น๋(maxFrequency)๋ณด๋ค ํฌ๋ค๋ฉด:
๋ ์์ฃผ ๋์จ ์ซ์๋ฅผ ๋ฐ๊ฒฌํ ๊ฒ์ด๋ฏ๋ก, ์ต๋น๊ฐ์ ์
๋ฐ์ดํธ ํ๋ค.
2. maxFrequency = freq :
ํ์ฌ ์ซ์์ ๋น๋(freq)๋ฅผ ์ต๋๋น๋๋ก ์
๋ฐ์ดํธํ๋ค. ์ฆ, ์๋ก์ด ์ต๋น๊ฐ์ ๋น๋๋ฅผ ๊ธฐ๋กํ๋ค.
3. mode = key :
ํ์ฌ ์ซ์(key)๋ฅผ ์ต๋น๊ฐ(mode)๋ก ์ค์ ํ๋ค. ์ฆ, ์ต๋น๊ฐ์ ์๋ก ๋ฐ๊ฒฌ๋ ์ซ์๋ก ๊ต์ฒดํ๋ค.
[ ์ฝ๋์ ๋์ ๊ณผ์ ]
๋ฐฐ์ด์ ๋ค์ด ์๋ ์ซ์๋ค์ ํ๋์ฉ ๋น๊ตํ๋ฉด์ ์ต๋น๊ฐ์ ์ฐพ์ต๋๋ค.
์ด๊ธฐ ์ํ
• maxFrequency = 0 (์์ง ์ต๋ ๋น๋๊ฐ ์์)
• mode = -1 (์์ง ์ต๋น๊ฐ์ด ์ ํด์ง์ง ์์)
์์ ๋ฐฐ์ด: {1, 2, 2, 3}
frequencyMap = {1: 1, 2: 2, 3: 1}
1. ์ฒซ ๋ฒ์งธ ์ซ์: 1
freq = 1, maxFrequency = 0.
if (1 > 0) ์กฐ๊ฑด์ด ์ฐธ → ์
๋ฐ์ดํธ:
maxFrequency = 1.
mode = 1.
- ๋ ๋ฒ์งธ ์ซ์: 2
freq = 2, maxFrequency = 1.
if (2 > 1) ์กฐ๊ฑด์ด ์ฐธ → ์ ๋ฐ์ดํธ:
maxFrequency = 2.
mode = 2. - ์ธ ๋ฒ์งธ ์ซ์: 3
freq = 1, maxFrequency = 2.
if (1 > 2) ์กฐ๊ฑด์ด ๊ฑฐ์ง → ์๋ฌด ์ผ๋ ํ์ง ์์.
< ์ต์ข
๊ฒฐ๊ณผ >
maxFrequency = 2 (๊ฐ์ฅ ์์ฃผ ๋์จ ํ์: 2ํ)
mode = 2 (์ต๋น๊ฐ: 2)
Solution ๐ก
import java.util.HashMap;
class Solution {
public int solution(int[] array) {
// 1๋จ๊ณ: ์ซ์์ ๋น๋ ๊ธฐ๋ก
HashMap<Integer, Integer> frequencyMap = new HashMap<>();
for (int num : array) {
frequencyMap.put(num, frequencyMap.getOrDefault(num, 0) + 1);
}
// 2๋จ๊ณ: ์ต๋น๊ฐ ์ฐพ๊ธฐ
int maxFrequency = 0;
int mode = -1;
boolean hasDuplicate = false;
for (int key : frequencyMap.keySet()) {
int freq = frequencyMap.get(key);
if (freq > maxFrequency) {
maxFrequency = freq;
mode = key;
hasDuplicate = false;
} else if (freq == maxFrequency) {
hasDuplicate = true;
}
}
// 3๋จ๊ณ: ์ค๋ณต ์ต๋น๊ฐ ์ฒ๋ฆฌ
return hasDuplicate ? -1 : mode;
}
}
< ์ฝ๋ ๋ฏ์ด๋ณด๊ธฐ >
HashMap์ด๋?
์ ์ :
HashMap์ ์๋ฐ์์ ์ ๊ณตํ๋ ํค-๊ฐ(Key-Value)์์ ์ ์ฅํ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ด๋ค.
-Key : ๊ณ ์ ํ ๊ฐ(์ฌ๊ธฐ์๋ ๋ฐฐ์ด์ ์ซ์)
-Value : ํค์ ์ฐ๊ฒฐ๋ ๊ฐ(์ฌ๊ธฐ์๋ ํด๋น ์ซ์์ ๋น๋)
์ฌ์ฉ๋ฒ :
1. ์ ์ธ
java
HashMap<KeyType, ValueType> map = new HashMap<>();
- KeyType๊ณผ ValueType์ ์๋ฃํ(์ : Integer, String ๋ฑ)์ ์ง์ ํ๋ค.
2. ์ถ๊ฐ/ ์ ๋ฐ์ดํธ
java
map.put(key, value);
- key๊ฐ ์ด๋ฏธ ์กด์ฌํ๋ฉด ๊ฐ์ ์ ๋ฐ์ดํธํ๊ณ , ์๋ค๋ฉด ์๋ก ์ถ๊ฐํ๋ค.
- ์ถ๊ฐ : key๊ฐ HashMap์ ์กด์ฌํ์ง ์์ผ๋ฉด, ์๋ก ์ถ๊ฐํ๋ค.
- ์ ๋ฐ์ดํธ : key๊ฐ ์ด๋ฏธ ์กด์ฌํ๋ฉด, ๊ธฐ์กด ๊ฐ์ ์๋ก์ด value๋ก ๋ฎ์ด์ด๋ค.
- ๋ฐ๋ผ์ put()์ ์ด๋ค ์ซ์๊ฐ ๋ช ๋ฒ ๋์๋์ง ๊ณ์ํด์ ์ ๋ฐ์ดํธํ๊ฑฐ๋ ์ถ๊ฐํ ์ ์๋ค.
for (int num : array) {
frequencyMap.put(num, frequencyMap.getOrDefault(num, 0) +1);
}
< getOrDefault(Key, DefaultValue)์ ๋ฌธ๋ฒ ๊ตฌ์กฐ >
1.์ ์
java
map.getOrDefault(Key, DefaultValue)
- key : HashMap์์ ๊ฐ์ ธ์ค๋ ค๋ ํค์ด๋ค. ์ฌ๊ธฐ์๋ num, ์ฆ ๋ฐฐ์ด์ ์์.
- DefaultValue : ํค๊ฐ HashMap์ ์์ ๋ ๋ฐํํ ๊ธฐ๋ณธ๊ฐ์ด๋ค. ์ฌ๊ธฐ์๋ 0์๋ ๋ฐฉ์
1) Key๊ฐ ์กด์ฌํ ๊ฒฝ์ฐ:
HashMap์์ ํด๋น ํค์ ์ฐ๊ฒฐ๋ ๊ฐ์ ๋ฐํํ๋ค.
์๋ฅผ ๋ค์ด, HashMap์ 1:3์ด ์ ์ฅ๋์ด ์์ผ๋ฉด, map.getOrDefault(1,0)์ 3์ ๋ฐํํ๋ค.
2) key๊ฐ ์กด์ฌํ์ง ์์ ๊ฒฝ์ฐ:
๊ธฐ๋ณธ๊ฐ DefaultValue๋ฅผ ๋ฐํํ๋ค
์๋ฅผ ๋ค์ด, HashMap์ 2๋ผ๋ ํค๊ฐ ์์ผ๋ฉด, map.getOrDefault(2, 0)์ 0์ ๋ฐํํ๋ค.
์ getOrDefault๋ฅผ ์ฌ์ฉํ๋๊ฐ?
1 ) get()๋ง ์ฌ์ฉํ๋ ๊ฒฝ์ฐ:
๋ง์ฝ ํค๊ฐ ์์ผ๋ฉด null์ ๋ฐํ.
null์ ์ฒ๋ฆฌํ๋ ค๋ฉด ์ถ๊ฐ ์กฐ๊ฑด๋ฌธ์ด ํ์ํ๋ค.
java
Integer value = frequencyMap.get(1);
if (value == null) {
value = 0; // ๊ธฐ๋ณธ๊ฐ์ ์๋์ผ๋ก ์ค์
}
2) getOrDefault()๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ :
-ํค๊ฐ ์์ ๋ ๊ธฐ๋ณธ๊ฐ์ ์๋์ผ๋ก ๋ฐํํ๋ฏ๋ก ์ถ๊ฐ ์กฐ๊ฑด๋ฌธ์ด ํ์ ์๋ค.
java
int value = frequencyMap.getOrDefault(1,0);
<frequencyMap.put(num, frequencyMap.getOrDefault(num, 0) + 1)์ ๊ตฌ์กฐ
1. num์ ์ญํ
num: ๋ฐฐ์ด์์ ์ํ ์ค์ธ ํ์ฌ ์ซ์์ด๋ค. (์: {1, 2, 2, 3}์ ์ฒซ ๋ฒ์งธ ์ํ์์ num =1)
2.frequencyMap.getOrDefault(num,0)์ ์ญํ
- getOrDefault(num,0):
์ค๋ช
: frequencyMap์์ ํ์ฌ ์ซ์ num์ ๊ธฐ๋ก๋ ๊ฐ(๋น๋)๋ฅผ ๊ฐ์ ธ์จ๋ค.
๊ธฐ๋ฅ : Key(์ซ์)๊ฐ ์กด์ฌ : ํด๋น key์ ์ ์ฅ๋ ๊ฐ์ ๋ฐํํ๋ค.
key(์ซ์)๊ฐ ์์ : ๊ธฐ๋ณธ๊ฐ 0์ ๋ฐํํ๋ค.
**
- ์ ํ์ํ๊ฐ?**
HashMap์ ์ซ์๊ฐ ์ฒ์ ๋ฑ์ฅํ ๊ฒฝ์ฐ, ๊ฐ์ 0์์ ์์ํ๋๋ก ํ๋ค.
-์:
์ฒ์ num = 1์ผ ๋, frequencyMap์ 1์ด ์์ผ๋ฏ๋ก 0 ๋ฐํ
๋ค์์ num = 2๊ฐ ์ฒ์ ๋ฑ์ฅํ๋ฉด 0 ๋ฐํ
3. +1์ ์ญํ
์ซ์๊ฐ ๋ฑ์ฅํ์ผ๋ฏ๋ก, ๊ทธ ์ซ์์ ๋น๋๋ฅผ 1 ์ฆ๊ฐ์ํจ๋ค.
getOrDefault(num, 0)์ผ๋ก ๊ฐ์ ธ์จ ํ์ฌ ๋น๋์ 1์ ๋ํ ๊ฐ์ ์๋ก ์ ์ฅํ๋ค.
์ฒ์ 1์ด ๋์ค๋ฉด 0+1 =1.
2๊ฐ ๋ ๋ฒ์งธ๋ก ๋์ค๋ฉด : ๊ธฐ์กด๊ฐ 1+1=2.
4.frequencyMap.put(num, ...)์ ์ญํ
put()์ ์ฌ์ฉํ์ฌ, ์ซ์์ ์ ๋น๋๋ฅผ frequencyMap์ ์ถ๊ฐํ๊ฑฐ๋ ์
๋ฐ์ดํธํ๋ค.
์ซ์๊ฐ ์ฒ์ ๋์ค๋ฉด ์๋ก ์ถ๊ฐํ๋ค.
์ซ์๊ฐ ์ด๋ฏธ ์์ผ๋ฉด ์ ๋น๋๋ก ์
๋ฐ์ดํธํ๋ค.
< ์๋ ๊ณผ์ >
๋ฐฐ์ด{1,2,2,3}์ ์ฒ๋ฆฌํ๋ค๊ณ ๊ฐ์
- ์ด๊ธฐ ์ํ
frequencyMap์ ๋น์ด ์์:{} -
- ์ฒซ๋ฒ์งธ ์ซ์: num=1
1) frequencyMap.getOrDefault(1, 0)-> 0(Key 1์ด ์์ผ๋ฏ๋ก ๊ธฐ๋ณธ๊ฐ 0 ๋ฐํ).
2) 0+1=1 -> ๋น๋๋ฅผ 1๋ก ์ ๋ฐ์ดํธ
3) frequencyMap.put(1,1) -> frequencyMap์ 1:1 ์ ์ฅ. - ๊ฒฐ๊ณผ:{1:1}
- ์ฒซ๋ฒ์งธ ์ซ์: num=1
-
- ๋๋ฒ์งธ ์ซ์: num =2
1) frequencyMap.getOrDefault(2,0) -> 0(key 2๊ฐ ์์ผ๋ฏ๋ก ๊ธฐ๋ณธ๊ฐ 0 ๋ฐํ)
2) 0+1=1 -> ๋น๋๋ฅผ 1๋ก ์ ๋ฐ์ดํธ
3) frequencyMap.put(2,1) -> frequencyMap์ 2:1 ์ ์ฅ. - ๊ฒฐ๊ณผ:{1:1, 2:1}
- ๋๋ฒ์งธ ์ซ์: num =2
-
- ์ธ๋ฒ์งธ ์ซ์: num=2 (๋ค์ ๋ฑ์ฅ)
1) frequencyMap.getOrDefault(2,0) -> key 2์ ํ์ฌ ๊ฐ์ 1.
2) 1 + 1 = 2 -> ๋น๋๋ฅผ 2๋ก ์ ๋ฐ์ดํธ.
3) frequencyMap.put(2,2) -> frequencyMap์ 2:2 ์ ์ฅ - ๊ฒฐ๊ณผ:{1:1, 2:2}
- ์ธ๋ฒ์งธ ์ซ์: num=2 (๋ค์ ๋ฑ์ฅ)
-
- ๋ค๋ฒ์งธ ์ซ์: num=3
1) frequencyMap.getOrDefault(3,0) -> 0 (key 3๊ฐ ์์ผ๋ฏ๋ก ๊ธฐ๋ณธ๊ฐ 0 ๋ฐํ)
2) 0 + 1 =1 -> ๋น๋๋ฅผ 1๋ก ์ ๋ฐ์ดํธ
3) frequencyMap.put(3,1) -> frequencyMap์ 3:1 ์ ์ฅ. - ๊ฒฐ๊ณผ:{1:1, 2:2, 3:1}
- ๋ค๋ฒ์งธ ์ซ์: num=3
์ ์ด๋ ๊ฒ ๋์ํด์ผ ํ๋?
- ๋น๋๋ฅผ ๊ธฐ๋กํด์ผ ํ๋ ์ด์ :
๋ฐฐ์ด์ ๋ฑ์ฅํ๋ ๊ฐ ์ซ์์ ๊ฐ์๋ฅผ ์ธ๊ธฐ ์ํด ํ์ํ๋ค. - getOrDefault()๋ฅผ ์ฌ์ฉํ๋ ์ด์ :
์ซ์๊ฐ ์ฒ์ ๋ฑ์ฅํ์ ๋, ๊ฐ์ 0์์ ์์ํ ์ ์๋ค. - +1์ ํด์ค์ผ ํ๋ ์ด์ :
์ซ์๊ฐ ๋ฐฐ์ด์ ๋ฑ์ฅํ ๋๋ง๋ค ํด๋น ์ซ์์ ๋น๋๋ฅผ 1์ฉ ์ฆ๊ฐ์ํค๊ธฐ ์ํด.
frequencyMap.put(num, frequencyMap.getOrDefault(num,0)+1) ํ๋ฆ ์์ฝ
1) frequencyMap.getOrDefault(num, 0):
- ํ์ฌ ์ซ์ num์ ๋น๋๋ฅผ ๊ฐ์ ธ์ด. ์์ผ๋ฉด 0 ๋ฐํ
2) +1 : - ํ์ฌ ์ซ์๊ฐ ๋ฑ์ฅํ์ผ๋ฏ๋ก, ๋น๋๋ฅผ 1 ์ฆ๊ฐ.
3) frequencyMap.put(num, ...) :
์๋ก ๊ณ์ฐ๋ ๋น๋๋ฅผ frequencyMap์ ์ถ๊ฐํ๊ฑฐ๋ ์ ๋ฐ์ดํธ.
๊ฐ๋จํ ๋น์
- frequencyMap์ ์ซ์์ ์ถ์๋ถ์ด๋ค.
์ฒ์ ์จ ํ์์ "0๋ฒ ์ถ์"์์ ์์ํ๋ค.
์ด๋ฏธ ์ถ์ํ ํ์์ ์ถ์ ํ์์ 1์ ๋ํ๋ค. - ์ฝ๋๋ก ํํ :
getOrDefault(num,0) -> "ํ์์ ํ์ฌ ์ถ์ ํ์๋ฅผ ํ์ธ"
+1 -> ์ถ์์ ํ ๋ฒ ๋ ๊ธฐ๋ก
put() -> ์ถ์ ํ์๋ฅผ ์ถ์๋ถ์ ์ ๋ฐ์ดํธ
3. ๊ฐ ๊ฐ์ ธ์ค๊ธฐ
java
map.get(key);
- Key์ ํด๋นํ๋ ๊ฐ์ ๊ฐ์ ธ์จ๋ค. ํค๊ฐ ์์ผ๋ฉด null์ ๋ฐํํ๋ค.
4. ๊ธฐ๋ณธ๊ฐ ๊ฐ์ ธ์ค๊ธฐ
java
map.getOrDefault(key, defaultValue);
key๊ฐ ์์๋, defaultValue๋ฅผ ๋ฐํํ๋ค.
for๋ฌธ ์ฝ๋ ๋ฏ์ด๋ณด๊ธฐ
for (int key : frequencyMap.keySet()) {
int freq = frequencyMap.get(key);
if (freq > maxFrequency) {
maxFrequency = freq;
mode = key;
hasDuplicate = false;
} else if (freq == maxFrequency) {
hasDuplicate = true;
}
}
< ์ ์ฒด ์ญํ >
frequencyMap์ ์ซ์(key)์ ํด๋น ์ซ์์ ๋น๋(freq)๋ฅผ ์ ์ฅํ๋ Map์ด๋ค.
์ด ์ฝ๋๋ freqeuncyMap์ ์ํํ์ฌ ๊ฐ์ฅ ํฐ ๋น๋์๋ฅผ ๊ฐ์ง๋ key(์ฆ, ์ต๋น๊ฐ)์ ์ฐพ๊ณ ,
๋์ผํ ๋น๋์๋ฅผ ๊ฐ์ง๋ ๊ฐ์ด ์ฌ๋ฌ ๊ฐ ์๋์ง(hasDuplicate)๋ ํ์ธํ๋ค.
<์ฝ๋ ์ธ๋ถ ๋ถ์>
1. for (int key : freqeuncyMap.keySet())
- frequencyMap.keySet()์ ํตํด ๋ชจ๋ key๋ฅผ ๊ฐ์ ธ์จ๋ค.
- ๊ฐ key๋ฅผ ์ํํ๋ฉฐ ํด๋น key์ ๋น๋๋ฅผ ํ์ธํ๋ค.
keySet() ๋ฉ์๋๋ ๋ญ์ผ?
Map์์ ๋ชจ๋ ์ด๋ฆํ(Key)๋ง ๊บผ๋ด์ ๋ณด์ฌ์ค๋ค.
frequencyMap.keySet()์ ์ฐ๋ฉด [์ฒซ๋ฒ์งธ ํค๊ฐ, ๋๋ฒ์งธ ํค๊ฐ, ์ธ๋ฒ์งธ ํค๊ฐ....] ํํ๋ก ์ถ๋ ฅ๋๋ค.
ํค๊ฐ์ ๊ฐ์ ธ์ค๋ฉด ์ด ํค ๊ฐ์ ์ด์ํ์ฌ ์ฐ๋ฆฌ๊ฐ Map์์ ์ํ๋ ๊ฐ์ ๊บผ๋ผ ์ ์๋ค.
์ฆ, ์ด ๋ฉ์๋๋ Map์์ key๋ก value๋ฅผ ์ฌ๋ ๊ฒ์ด๋ค.
-์ Set์ผ๋ก ๋ฐํ๋๋?
1)ํค์ ๊ณ ์ ์ฑ ๋ณด์ฅ:
Map์ ํค๋ ์ค๋ณต๋ ์ ์์ผ๋ฏ๋ก, ๋ฐํ๋ Set๋ ์ค๋ณต๋์ง ์๋ ๊ณ ์ ํ ๊ฐ๋ค์ ์งํฉ์ด๋ค.
2)์ํ์ ์ ํฉ:
Set์ for-each ๋ฃจํ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ Iterator๋ฅผ ํตํด ์ํํ ์ ์๋ค.
< keySet() ๋ฉ์๋ ์ฌ์ฉ ์์ >
1. keySet()์ผ๋ก ํค ์ํํ๊ธฐ
Map<Integer, Integer> frequencyMap = new HashMap<>();
frequencyMap.put(1, 3);
frequencyMap.put(2, 5);
frequencyMap.put(3, 2);
for (int key : frequencyMap.keySet()) {
System.out.println("Key: " + key + ", Value: " + frequencyMap.get(key));
}
์ถ๋ ฅ :
Key: 1, Value: 3
Key: 2, Value: 5
Key: 3, Value: 2
2. ๋ฐํ๋ Set ํ์ฉํ๊ธฐ
Set<Integer> keys = frequencyMap.keySet();
System.out.println("All keys: " + keys);
์ถ๋ ฅ :
All keys: [1, 2, 3]
2. int freq = freqencyMap.get(key);
ํ์ฌ key์ ํด๋นํ๋ ๋น๋์๋ฅผ ๊ฐ์ ธ์จ๋ค.
frequencyMap.get(key)๋ key์ ๋งคํ๋ ๋น๋์๋ฅผ ๋ฐํํ๋ค.
3. if (freq > maxFrequency)
ํ์ฌ freq(๋น๋)๊ฐ maxFrequency(ํ์ฌ๊น์ง ํ์ธํ ์ต๋ ๋น๋์)๋ณด๋ค ํฌ๋ค๋ฉด:
์๋ก์ด ์ต๋น๊ฐ์ ์ฐพ์๋ค๋ ๋ป.
๊ฐฑ์ ์์
:
- maxFrequency = freq; -> ์ต๋ ๋น๋์๋ฅผ ์ ๋ฐ์ดํธ.
- mode = key; -> ์ต๋น๊ฐ์ ํ์ฌ key๋ก ์ ๋ฐ์ดํธ.
- hasDuplicate = false ; -> ํ์ฌ ์ต๋น๊ฐ์ ์ ์ผํ๋ฏ๋ก ์ค๋ณต ์ฌ๋ถ๋ฅผ false๋ก ์ค์ ํ๋ค.
4. else if (freq == maxFrequency)
ํ์ฌ freq๊ฐ maxFrequency์ ๊ฐ๋ค๋ฉด :
๋์ผํ ๋น๋์๋ฅผ ๊ฐ์ง ๊ฐ์ด ์กด์ฌํ๋ค๋ ๋ป์ด๋ค.
hasDuplicate = true; -> ์ค๋ณต ์ฌ๋ถ๋ฅผ true๋ก ์ค์ .
๊ฒฐ๊ณผ
1. maxFrequency:
• ์ต๋๊ฐ์ ๊ฐ์ง๋ ๋น๋์.
2. mode:
• ์ต๋น๊ฐ(์ต๋๊ฐ์ ๊ฐ์ง๋ key).
3. hasDuplicate:
• ์ต๋น๊ฐ์ ๊ฐ์ง๋ key๊ฐ ์ฌ๋ฌ ๊ฐ์ธ์ง ์ฌ๋ถ๋ฅผ ๋ํ๋ธ๋ค.
• true๋ผ๋ฉด ์ฌ๋ฌ key๊ฐ ๊ฐ์ ๋น๋์๋ฅผ ๊ฐ์ง ๊ฒ์ด๋ค.
• false๋ผ๋ฉด ์ต๋น๊ฐ์ด ์ ์ผํ๋ค.
