Problem ๐Ÿ’ป

์ตœ๋นˆ๊ฐ’์€ ์ฃผ์–ด์ง„ ๊ฐ’ ์ค‘์—์„œ ๊ฐ€์žฅ ์ž์ฃผ ๋‚˜์˜ค๋Š” ๊ฐ’์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
์ •์ˆ˜ ๋ฐฐ์—ด array๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ์ตœ๋นˆ๊ฐ’์„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด๋ณด์„ธ์š”. ์ตœ๋นˆ๊ฐ’์ด ์—ฌ๋Ÿฌ ๊ฐœ๋ฉด -1์„ return ํ•ฉ๋‹ˆ๋‹ค.


Approach 1 โŒ

  1. ๋ฐฐ์—ด์—์„œ ์ค‘๋ณต๋œ ์ˆ˜๊ฐ€ ์–ด๋–ค๊ฒƒ์ธ์ง€ ๊ณจ๋ผ๋‚ด๊ธฐ
  2. ์ค‘๋ณต๋œ ์ˆ˜๊ฐ€ ๋ช‡ ๊ฐœ์ธ์ง€ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ˆœ์œ„ ๋งค๊ธฐ๊ธฐ.
  3. ์ˆœ์œ„ ์ค‘ ์ตœ๋‹ค์ธ 1์œ„๊ฐ€ ์ค‘๋ณต์ด๋ผ๋ฉด -1 ๋„์ถœํ•˜๊ธฐ.

์ผ๋‹จ ๋‚˜๋Š” ๋ฐฐ์—ด์—์„œ ์ค‘๋ณต๋œ ์ˆ˜๋ฅผ ๊ณจ๋ผ๋‚ด๋Š” ๋ฒ•์„ ๋ชจ๋ฅธ๋‹ค.
์ค‘๋ณต๋œ ์ˆ˜๋ฅผ ๊ณจ๋ผ๋‚ธ๋‹ค๊ณ  ํ•˜๋”๋ผ๋„ ๊ทธ ์ค‘ ์ค‘๋ณต๋œ ๊ฐฏ์ˆ˜๊ฐ€ ์ตœ๋‹ค์ธ ๊ฒƒ๋„ ๊ณจ๋ผ๋‚ด์ง€ ๋ชปํ•œ๋‹ค.
๋˜, ๊ฐฏ์ˆ˜๊ฐ€ ์ตœ๋‹ค์ธ ๊ฒƒ์ด ๋‹จ์ˆ˜์ธ์ง€ ๋ณต์ˆ˜์ธ์ง€๋„ ๊ตฌ๋ถ„ํ•˜์ง€ ๋ชปํ•œ๋‹ค.
๋ณต์ˆ˜๋ผ๋ฉด -1์„ ๋„์ถœํ•ด์•ผ ํ•˜๋Š” ๋ฒ•๋„ ๋ชจ๋ฅธ๋‹ค. 

Approach 2 โญ•

  1. ๋ฐฐ์—ด์—์„œ ์ค‘๋ณต๋œ ์ˆ˜๊ฐ€ ์–ด๋–ค๊ฒƒ์ธ์ง€ ๊ณจ๋ผ๋‚ด๊ธฐ
    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. ๋ฐฐ์—ด :
    ์ˆซ์ž๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ.
    ์˜ˆ: {1, 2, 2, 3}์€ ์ˆซ์ž 4๊ฐœ๊ฐ€ ๋ฐฐ์—ด์— ๋“ค์–ด ์žˆ๋Š” ๋ชจ์Šต
  2. HashMap:
    ๋‹จ์–ด์žฅ์„ ์ƒ๊ฐํ•˜๋ฉด๋œ๋‹ค.
    ํ‚ค์™€ ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๋„๊ตฌ์ด๋‹ค. -- ๋‘ ๊ฐœ์˜ ์ •๋ณด ์š”์†Œ๋ฅผ ์ง์ง“๋Š” ๋ฐฉ๋ฒ•.
    ํ‚ค: ์ฐพ๊ณ  ์‹ถ์€ ์ˆซ์ž.
    ๊ฐ’: ํ•ด๋‹น ์ˆซ์ž๊ฐ€ ๋‚˜์˜จ ํšŸ์ˆ˜.
  3. for-each๋ฌธ:
    ๋ฐฐ์—ด์ด๋‚˜ HashMap ์•ˆ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด๋Š” ๋ฐฉ๋ฒ•
java

for(int num : array) {
 // array ์•ˆ์— ์žˆ๋Š” ์ˆซ์ž num์„ ํ•˜๋‚˜์”ฉ ๊บผ๋ƒ„
}
  1. ์กฐ๊ฑด๋ฌธ:
    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.

  1. ๋‘ ๋ฒˆ์งธ ์ˆซ์ž: 2
    freq = 2, maxFrequency = 1.
    if (2 > 1) ์กฐ๊ฑด์ด ์ฐธ → ์—…๋ฐ์ดํŠธ:
    maxFrequency = 2.
    mode = 2.
  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์€ ๋น„์–ด ์žˆ์Œ:{}
    1. ์ฒซ๋ฒˆ์งธ ์ˆซ์ž: 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}
    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}
    1. ์„ธ๋ฒˆ์งธ ์ˆซ์ž: 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}
    1. ๋„ค๋ฒˆ์งธ ์ˆซ์ž: 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}

์™œ ์ด๋ ‡๊ฒŒ ๋™์ž‘ํ•ด์•ผ ํ•˜๋‚˜?

  • ๋นˆ๋„๋ฅผ ๊ธฐ๋กํ•ด์•ผ ํ•˜๋Š” ์ด์œ :
    ๋ฐฐ์—ด์— ๋“ฑ์žฅํ•˜๋Š” ๊ฐ ์ˆซ์ž์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•˜๋‹ค.
  • 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๋ผ๋ฉด ์ตœ๋นˆ๊ฐ’์ด ์œ ์ผํ•˜๋‹ค.
 
 

+ Recent posts