๊ด€๋ฆฌ ๋ฉ”๋‰ด

Daehyunii's Dev-blog

๋ฒ ์ŠคํŠธ ์•จ๋ฒ”, ๊ณ ์ฐจ ํ•จ์ˆ˜ ์ •๋ฆฌ ๋ณธ๋ฌธ

๐Ÿ“š Language & CS knowledge/Algorithm (ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค)

๋ฒ ์ŠคํŠธ ์•จ๋ฒ”, ๊ณ ์ฐจ ํ•จ์ˆ˜ ์ •๋ฆฌ

Daehyunii 2022. 10. 21. 23:08

์ถœ์ฒ˜ : ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค https://programmers.co.kr/

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

 

๋ฌธ์ œ ์„ค๋ช…
๋ฌธ์ œ ์„ค๋ช…
์ŠคํŠธ๋ฆฌ๋ฐ ์‚ฌ์ดํŠธ์—์„œ ์žฅ๋ฅด ๋ณ„๋กœ ๊ฐ€์žฅ ๋งŽ์ด ์žฌ์ƒ๋œ ๋…ธ๋ž˜๋ฅผ ๋‘ ๊ฐœ์”ฉ ๋ชจ์•„ ๋ฒ ์ŠคํŠธ ์•จ๋ฒ”์„ ์ถœ์‹œํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค. ๋…ธ๋ž˜๋Š” ๊ณ ์œ  ๋ฒˆํ˜ธ๋กœ ๊ตฌ๋ถ„ํ•˜๋ฉฐ, ๋…ธ๋ž˜๋ฅผ ์ˆ˜๋กํ•˜๋Š” ๊ธฐ์ค€์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

1. ์†ํ•œ ๋…ธ๋ž˜๊ฐ€ ๋งŽ์ด ์žฌ์ƒ๋œ ์žฅ๋ฅด๋ฅผ ๋จผ์ € ์ˆ˜๋กํ•ฉ๋‹ˆ๋‹ค.
2. ์žฅ๋ฅด ๋‚ด์—์„œ ๋งŽ์ด ์žฌ์ƒ๋œ ๋…ธ๋ž˜๋ฅผ ๋จผ์ € ์ˆ˜๋กํ•ฉ๋‹ˆ๋‹ค.
3. ์žฅ๋ฅด ๋‚ด์—์„œ ์žฌ์ƒ ํšŸ์ˆ˜๊ฐ€ ๊ฐ™์€ ๋…ธ๋ž˜ ์ค‘์—์„œ๋Š” ๊ณ ์œ  ๋ฒˆํ˜ธ๊ฐ€ ๋‚ฎ์€ ๋…ธ๋ž˜๋ฅผ ๋จผ์ € ์ˆ˜๋กํ•ฉ๋‹ˆ๋‹ค.

๋…ธ๋ž˜์˜ ์žฅ๋ฅด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด ๋ฐฐ์—ด genres์™€ ๋…ธ๋ž˜๋ณ„ ์žฌ์ƒ ํšŸ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ ๋ฐฐ์—ด plays๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, ๋ฒ ์ŠคํŠธ ์•จ๋ฒ”์— ๋“ค์–ด๊ฐˆ ๋…ธ๋ž˜์˜ ๊ณ ์œ  ๋ฒˆํ˜ธ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•˜์„ธ์š”.

์ œํ•œ์‚ฌํ•ญ
genres[i]๋Š” ๊ณ ์œ ๋ฒˆํ˜ธ๊ฐ€ i์ธ ๋…ธ๋ž˜์˜ ์žฅ๋ฅด์ž…๋‹ˆ๋‹ค.
plays[i]๋Š” ๊ณ ์œ ๋ฒˆํ˜ธ๊ฐ€ i์ธ ๋…ธ๋ž˜๊ฐ€ ์žฌ์ƒ๋œ ํšŸ์ˆ˜์ž…๋‹ˆ๋‹ค.
genres์™€ plays์˜ ๊ธธ์ด๋Š” ๊ฐ™์œผ๋ฉฐ, ์ด๋Š” 1 ์ด์ƒ 10,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
์žฅ๋ฅด ์ข…๋ฅ˜๋Š” 100๊ฐœ ๋ฏธ๋งŒ์ž…๋‹ˆ๋‹ค.
์žฅ๋ฅด์— ์†ํ•œ ๊ณก์ด ํ•˜๋‚˜๋ผ๋ฉด, ํ•˜๋‚˜์˜ ๊ณก๋งŒ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
๋ชจ๋“  ์žฅ๋ฅด๋Š” ์žฌ์ƒ๋œ ํšŸ์ˆ˜๊ฐ€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ
genres                                                                  plays                                        return
["classic", "pop", "classic", "classic", "pop"]  [500, 600, 150, 800, 2500]  [4, 1, 3, 0]

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…
classic ์žฅ๋ฅด๋Š” 1,450ํšŒ ์žฌ์ƒ๋˜์—ˆ์œผ๋ฉฐ, classic ๋…ธ๋ž˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
๊ณ ์œ  ๋ฒˆํ˜ธ 3: 800ํšŒ ์žฌ์ƒ
๊ณ ์œ  ๋ฒˆํ˜ธ 0: 500ํšŒ ์žฌ์ƒ
๊ณ ์œ  ๋ฒˆํ˜ธ 2: 150ํšŒ ์žฌ์ƒ

pop ์žฅ๋ฅด๋Š” 3,100ํšŒ ์žฌ์ƒ๋˜์—ˆ์œผ๋ฉฐ, pop ๋…ธ๋ž˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
๊ณ ์œ  ๋ฒˆํ˜ธ 4: 2,500ํšŒ ์žฌ์ƒ
๊ณ ์œ  ๋ฒˆํ˜ธ 1: 600ํšŒ ์žฌ์ƒ

๋”ฐ๋ผ์„œ pop ์žฅ๋ฅด์˜ [4, 1]๋ฒˆ ๋…ธ๋ž˜๋ฅผ ๋จผ์ €, classic ์žฅ๋ฅด์˜ [3, 0]๋ฒˆ ๋…ธ๋ž˜๋ฅผ ๊ทธ๋‹ค์Œ์— ์ˆ˜๋กํ•ฉ๋‹ˆ๋‹ค.
์žฅ๋ฅด ๋ณ„๋กœ ๊ฐ€์žฅ ๋งŽ์ด ์žฌ์ƒ๋œ ๋…ธ๋ž˜๋ฅผ ์ตœ๋Œ€ ๋‘ ๊ฐœ๊นŒ์ง€ ๋ชจ์•„ ๋ฒ ์ŠคํŠธ ์•จ๋ฒ”์„ ์ถœ์‹œํ•˜๋ฏ€๋กœ 2๋ฒˆ ๋…ธ๋ž˜๋Š” ์ˆ˜๋ก๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

  ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ํ’€๋ฉด์„œ ๊ฐ€์žฅ ๋งŽ์ด ๋Š๋‚€๊ฒƒ์ด ๊ณ ์ฐจ ํ•จ์ˆ˜์— ๋Œ€ํ•œ ํ™œ์šฉ ๋Šฅ๋ ฅ์ด ๊ต‰์žฅํžˆ ๋ถ€์กฑํ•˜๋‹ค๊ณ  ๋Š๊ผˆ๋‹ค. ๋ฐฐ์—ด์˜ ๊ณ ์ฐจ ํ•จ์ˆ˜ ๊ด€๋ จ ๋‚ด์šฉ๊ณผ ๊ธฐํƒ€ ๋ฉ”์„œ๋“œ๋“ค์— ๋Œ€ํ•ด์„œ๋Š” ์ฑ…๋งŒ ํ•œ ๋ฒˆ ์ญ‰์ฝ์–ด๋ณด๊ณ  ์–ธ์  ๊ฐ€ ์‚ฌ์šฉํ•  ๋•Œ ํ•˜๋‚˜์”ฉ ์•Œ์•„ ๊ฐ€์•ผ๊ฒ ๋‹ค๋ผ๋Š” ์ƒ๊ฐ์œผ๋กœ ๊ณ„์† ๋ฏธ๋ค˜๋Š”๋ฐ ์ด์ œ๋Š” ์ง„์งœ ๊ณ ์ฐจํ•จ์ˆ˜๋“ค์„ ํ•˜๋‚˜์”ฉ ์ œ๋Œ€๋กœ ์ตํ˜€์•ผ ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค. 

 

  ๋ฌธ์ œ๋ฅผ ์ง์ ‘ ํ•ด๊ฒฐํ•˜์ง€๋Š” ๋ชปํ–ˆ๊ณ  ๊ฐ•์˜๋ฅผ ๋“ค์œผ๋ฉด์„œ ์ •๋‹ต์„ ์ž‘์„ฑํ•ด์ฃผ์‹  ๋‚ด์šฉ์„ ํ† ๋Œ€๋กœ ํ™œ์šฉ๋œ ๊ณ ์ฐจ ํ•จ์ˆ˜๋ฅผ ํ•˜๋‚˜์”ฉ ์•Œ์•„๋ณด๊ณ  ๊ฐ•์‚ฌ๋‹˜์˜ ๋ฌธ์ œ ํ•ด๊ฒฐ ์ฝ”๋“œ๋ฅผ ํ•˜๋‚˜์”ฉ ๋œฏ์–ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

 


  • Array.prototype.map(์ฝœ๋ฐฑ ํ•จ์ˆ˜(3๊ฐ€์ง€ ์ธ์ˆ˜), map ๋ฉ”์„œ๋“œ์˜ ์ฝœ๋ฐฑ ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ this๋กœ ์‚ฌ์šฉํ•  ๊ฐ์ฒด) 
  • ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜์— 3๊ฐœ์˜ ์ธ์ˆ˜๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.(์š”์†Œ๊ฐ’, index, ๋ฐฐ์—ด์ž์ฒด) cf) forEach ๋ฉ”์„œ๋“œ๋„ ๋™์ผ
  • item : map ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ ๋ฐฐ์—ด์˜ ๋ฐ˜๋ณต๋˜๋Š” ์š”์†Œ ํ•˜๋‚˜ ํ•˜๋‚˜ (์ด๋ฆ„์€ ์ž์œ ๋กญ๊ฒŒ)
  • index : map ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ ๋ฐฐ์—ด์˜ ๋ฐ˜๋ณต๋˜๋Š” ์š”์†Œ ํ•˜๋‚˜์˜ ์ธ๋ฑ์Šค (์ด๋ฆ„์€ ์ž์œ ๋กญ๊ฒŒ)
  • this : map ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ ๋ฐฐ์—ด ๊ทธ ์ž์ฒด (์ด๋ฆ„์€ ์ž์œ ๋กญ๊ฒŒ)

 

  map ๋ฉ”์„œ๋“œ๋Š” ์ž์‹ ์„ ํ˜ธ์ถœํ•œ ๋ฐฐ์—ด์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋ฐ›์€ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ๋ฐ˜๋ณต ํ˜ธ์ถœํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ฝœ๋ฐฑ ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜๊ฐ’๋“ค๋กœ ๊ตฌ์„ฑ๋œ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ด๋•Œ ์›๋ณธ ๋ฐฐ์—ด์€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š”๋‹ค. cf) forEach ๋ฉ”์„œ๋“œ๋Š” ์–ธ์ œ๋‚˜ undefined๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

forEach ๋ฉ”์„œ๋“œ๋Š” ๋‹จ์ˆœํžˆ ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ€์ฒดํ•˜๊ธฐ ์œ„ํ•œ ๊ณ ์ฐจ ํ•จ์ˆ˜์ด๊ณ ,
map ๋ฉ”์„œ๋“œ๋Š” ์š”์†Œ๊ฐ’์„ ๋‹ค๋ฅธ ๊ฐ’์œผ๋กœ ๋งคํ•‘ํ•œ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ๊ณ ์ฐจ ํ•จ์ˆ˜์ด๋‹ค.

  • Array.prototype.forEach(์ฝœ๋ฐฑ ํ•จ์ˆ˜(3๊ฐ€์ง€ ์ธ์ˆ˜), forEach ๋ฉ”์„œ๋“œ์˜ ์ฝœ๋ฐฑ ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ this๋กœ ์‚ฌ์šฉํ•  ๊ฐ์ฒด)
  • ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜์— 3๊ฐœ์˜ ์ธ์ˆ˜๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.(์š”์†Œ๊ฐ’, index, ๋ฐฐ์—ด์ž์ฒด) cf) map ๋ฉ”์„œ๋“œ์™€ ๋™์ผํ•จ

forEach ๋ฉ”์„œ๋“œ๋Š” for ๋ฌธ์„ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋Š” ๊ณ ์ฐจ ํ•จ์ˆ˜๋‹ค. forEach ๋ฉ”์„œ๋“œ๋Š” ๋ฐ˜๋ณต๋ฌธ์„ ์ถ”์ƒํ™”ํ•œ ๊ณ ์ฐจ ํ•จ์ˆ˜๋กœ์„œ ๋‚ด๋ถ€์—์„œ ๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด ์ž์‹ ์„ ํ˜ธ์ถœํ•œ ๋ฐฐ์—ด์„ ์ˆœํšŒํ™”๋ฉด์„œ ์ˆ˜ํ–‰ํ•ด์•ผํ•  ์ฒ˜๋ฆฌ๋ฅผ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋กœ ์ „๋‹ฌ๋ฐ›์•„ ๋ฐ˜๋ณต ํ˜ธ์ถœํ•œ๋‹ค. forEach ๋ฉ”์„œ๋“œ๋Š” ์›๋ณธ ๋ฐฐ์—ด์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š”๋‹ค. ํ•˜์ง€๋งŒ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์›๋ณธ ๋ฐฐ์—ด์„ ๋ณ€๊ฒฝํ•  ์ˆ˜๋Š” ์žˆ๋‹ค. forEach ๋ฉ”์„œ๋“œ์˜ ๋ฐ˜ํ™˜๊ฐ’์€ ์–ธ์ œ๋‚˜ undefined๋‹ค.


  • Array.prototype.sort(๋น„๊ต ํ•จ์ˆ˜)

sort ๋ฉ”์„œ๋“œ๋Š” ๋ฐฐ์—ด์˜ ์š”์†Œ๋ฅผ ์ •๋ ฌํ•œ๋‹ค. ์›๋ณธ ๋ฐฐ์—ด์„ ์ง์ ‘ ๋ณ€๊ฒฝํ•˜์—ฌ ์ •๋ ฌ๋œ ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. sort ๋ฉ”์„œ๋“œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์š”์†Œ๋ฅผ ์ •๋ ฌํ•œ๋‹ค. ํ•œ๊ธ€ ๋ฌธ์ž์—ด์ธ ์š”์†Œ๋„ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ๋‹ค. ์ˆซ์ž ์š”์†Œ๋ฅผ ์ •๋ ฌํ•  ๋•Œ๋Š” sort ๋ฉ”์„œ๋“œ์— ์ •๋ ฌ ์ˆœ์„œ๋ฅผ ์ •์˜ํ•˜๋Š” ๋น„๊ต ํ•จ์ˆ˜๋ฅผ ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•ด์•ผ ํ•œ๋‹ค. ๋น„๊ต ํ•จ์ˆ˜๋Š” ์–‘์ˆ˜๋‚˜ ์Œ์ˆ˜ 0์„ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•œ๋‹ค. ๋น„๊ต ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜๊ฐ’์ด 0๋ณด๋‹ค ์ž‘์œผ๋ฉด ๋น„๊ต ํ•จ์ˆ˜์˜ ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜๋ฅผ ์šฐ์„ ํ•˜์—ฌ ์ •๋ ฌํ•˜๊ณ , 0์ด๋ฉด ์ •๋ ฌํ•˜์ง€ ์•Š์œผ๋ฉฐ, 0๋ณด๋‹ค ํฌ๋ฉด ๋‘ ๋ฒˆ์งธ ์ธ์ˆ˜๋ฅผ ์šฐ์„ ํ•˜์—ฌ ์ •๋ ฌํ•œ๋‹ค.


  • Array.prototype.slice(index, endIndex)
  • 1๋ฒˆ ์งธ ์ธ์ˆ˜ index๋Š” ๋ณต์‚ฌ๋ฅผ ์‹œ์ž‘ํ•  index ๋ฒˆํ˜ธ๋‹ค.
  • 2๋ฒˆ ์งธ ์ธ์ˆ˜ endIndex๋Š” ๋ณต์‚ฌ๋ฅผ ์ข…๋ฃŒํ•  ์ธ๋ฑ์Šค๋‹ค.(์ด ์ธ๋ฑ์Šค๋Š” ํ•ด๋‹นํ•˜๋Š” ์š”์†Œ๋Š” ๋ณต์‚ฌ๋˜์ง€ ์•Š๋Š”๋‹ค. ์ฆ‰, ์ด index ์ง์ „๊นŒ์ง€ ๋ณต์‚ฌ๋œ๋‹ค.) endIndex๋Š” ์ƒ๋žต ๊ฐ€๋Šฅํ•˜๋ฉฐ ์ƒ๋žต ์‹œ ๊ธฐ๋ณธ๊ฐ’์€ length ํ”„๋กœํผํ‹ฐ ๊ฐ’์ด๋‹ค.

slice ๋ฉ”์„œ๋“œ๋Š” ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋„๋‹ˆ ๋ฒ”์œ„์˜ ์š”์†Œ๋“ค์„ ๋ณต์‚ฌํ•˜์—ฌ ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์›๋ณธ ๋ฐฐ์—ด์€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š”๋‹ค. ์ด๋ฆ„์ด ์œ ์‚ฌํ•œ splice ๋ฉ”์„œ๋“œ๋Š” ์›๋ณธ ๋ฐฐ์—ด์„ ๋ณ€๊ฒฝํ•˜๋ฏ€๋กœ ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค. slice ๋ฉ”์„œ๋“œ๋Š” 2๊ฐœ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๊ฐ–๋Š”๋‹ค.


  • Map.prototype.entries() 

์š”์†Œ์˜ [ํ‚ค,๊ฐ’]์„ ํ•œ ์Œ์œผ๋กœ ํ•˜๋Š” ์ดํ„ฐ๋Ÿฌ๋ธ” ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜

  • Map.prototype.keys() 

๊ฐ ์š”์†Œ์˜ ํ‚ค๋ฅผ ๋ชจ์€ ์ดํ„ฐ๋Ÿฌ๋ธ” ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜

  • Map.prototype.values()

๊ฐ ์š”์†Œ์˜ ํ‚ค๋ฅผ ๋ชจ์€ ์ดํ„ฐ๋Ÿฌ๋ธ” ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜

    console.log(genresMap);
    console.log(genresMap.entries()); // ์š”์†Œ์˜ [ํ‚ค,๊ฐ’] ์„ ํ•œ ์Œ์œผ๋กœ ํ•˜๋Š” ์ดํ„ฐ๋Ÿฌ๋ธ” ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜
    console.log(genresMap.values()); // ๊ฐ ์š”์†Œ์˜ ๊ฐ’์„ ๋ชจ๋“  ์ดํ„ฐ๋Ÿฌ๋ธ” ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜
    console.log(genresMap.keys()); // ๊ฐ ์š”์†Œ์˜ ํ‚ค๋ฅผ ๋ชจ์€ ์ดํ„ฐ๋Ÿฌ๋ธ” ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜

MapIterator ๊ฐ์ฒด

์ด๋ฅผ ์ž˜ ํ™œ์šฉํ•˜๋ฉด ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ

console.log(genresMap);
console.log([...genresMap.entries()]); 
console.log([...genresMap.values()]); 
console.log([...genresMap.keys()]);

์œ„ ๋ฉ”์„œ๋“œ๋“ค์„ ํ™œ์šฉ

console.log(genresMap.entries()); // {ํ‚ค์™€ ๊ฐ’์„ ์Œ์œผ๋กœ ๊ฐ–๋Š” ์ดํ„ฐ๋Ÿฌ๋ธ” ๊ฐ์ฒด, ํ‚ค์™€ ๊ฐ’์„ ์Œ์œผ๋กœ ๊ฐ–๋Š” ์ดํ„ฐ๋Ÿฌ๋ธ” ๊ฐ์ฒด}
console.log(...genresMap.entries()); // [ํ‚ค, ๊ฐ’] [ํ‚ค, ๊ฐ’] ์˜ ๋ชฉ๋ก
console.log([...genresMap.entries()]); // [[ํ‚ค, ๊ฐ’],[ํ‚ค,๊ฐ’]] ์ด์ค‘ ๋ฐฐ์—ด ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜


  • Array.prototype.flatMap(map ๋ฉ”์„œ๋“œ์ฒ˜๋Ÿผ ๋™์ž‘ํ•  ์ฝœ๋ฐฑ ํ•จ์ˆ˜)
  • map ๋ฉ”์„œ๋“œ์™€ flat ๋ฉ”์„œ๋“œ๋ฅผ ํ•ฉ์นœ ๊ฒƒ์ด flatMap ๋ฉ”์„œ๋“œ๋‹ค.
  • map ๋ฉ”์„œ๋“œ ์ฒ˜๋Ÿผ ๋จผ์ € ์‹คํ–‰ํ•˜๊ณ  ๊ทธ ๋‹ค์Œ flat ๋ฉ”์„œ๋“œ ์ฒ˜๋Ÿผ ๋™์ž‘ํ•œ๋‹ค.

  flatMap ๋ฉ”์„œ๋“œ๋Š” map ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ๋œ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ํ‰ํƒ„ํ™”ํ•œ๋‹ค. ์ฆ‰, map ๋ฉ”์„œ๋“œ์™€ flat ๋ฉ”์„œ๋“œ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ํšจ๊ณผ๊ฐ€ ์žˆ๋‹ค. ๋‹จ flatMap ๋ฉ”์„œ๋“œ๋Š” flat ๋ฉ”์„œ๋“œ์ฒ˜๋Ÿผ ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜์—ฌ ํ‰ํƒ„ํ™” ๊นŠ์ด๋ฅผ ์ง€์ •ํ•  ์ˆ˜๋Š” ์—†๊ณ  1๋‹จ๊ณ„๋งŒ ํ‰ํƒ„ํ™”ํ•œ๋‹ค. ๋งŒ์•ฝ map ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ๋œ ์ค‘์ฒฉ ๋ฐฐ์—ด์˜ ํ‰ํƒ„ํ™” ๊นŠ์ด๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•˜๋ฉด flatMap ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ง๊ณ  map ๋ฉ”์„œ๋“œ์™€ flat ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ๊ฐ ํ˜ธ์ถœํ•œ๋‹ค.


๋ฌธ์ œํ’€์ด
function solution(genres, plays){
    let genresMap = new Map();

    genres.map((genre, index) => [genre, plays[index]]) // ๋งต์ด ๋งŒ๋“  ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•œ๊ฒƒ
    .forEach(([genre, play], index) => { //์„ forEach๋กœ ๋ฐ˜๋ณต(item, index)
        let data = genresMap.get(genre) || { total : 0, songs:[]};
        genresMap.set(genre, {
            total : data.total + play,
            songs : [...data.songs, {play, index}]//๊ฐ์ฒด์— ๋ณ€์ˆ˜๋ฅผ ๋ฐ”๋กœ ํ• ๋‹นํ•˜๋ฉด ํ•ด๋‹น ๋ณ€์ˆ˜๋ช…์œผ๋กœ ํ‚ค๊ฐ’์ด ์ƒ์„ฑ๋˜๊ณ  ๊ฐ’์ด ํ• ๋‹น๋จ // ...data.songs๋Š” ๊ธฐ์กด์— ๋“ค์–ด๊ฐ€ ์žˆ๋˜ songs๋ฅผ ๊ทธ๋ƒฅ ํ’€์–ด์„œ ๊ธฐ์กด์— ์žˆ๋˜ ๊ฐ์ฒด๋“ค์„ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•จ์ž„!!! 
                .sort((a,b) => b.play - a.play)
                .slice(0,2)
        })
    })

    
    return [...genresMap.entries()]
        .sort((a,b) => b[1].total - a[1].total)
        .flatMap(item => item[1].songs)
        .map(item => item.index);
}



console.log(solution(["classic", "pop", "classic", "classic", "pop"],[500, 600, 150, 800, 2500]));

 

  ๋ฌธ์ œํ’€์ด๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉ๋œ ๊ณ ์ฐจ ํ•จ์ˆ˜๋“ค์„ ์ •๋ฆฌํ•ด ๋ณด์•˜๋‹ค. ๋ฌธ์ œ ํ’€์ด๋ฅผ ์ดํ•ดํ•˜๋Š”๋ฐ ํ•˜๋‚˜ ํ•˜๋‚˜ ๋ฉ”์„œ๋“œ๋“ค์„ ์ดํ•ดํ•˜๊ณ  ๊ฐ€๋‹ˆ, ์‹œ๊ฐ„์ด ํ›„๋”ฑ ํ˜๋Ÿฌ๊ฐ€ ๋ฒ„๋ ธ๋‹ค. ๋‹จ์ˆœํžˆ ์ฝ๊ณ  ๋„˜์–ด๊ฐ€๊ธฐ์—๋Š” ์•ž์œผ๋กœ ๊ต‰์žฅํžˆ ๋งŽ์ด ์‚ฌ์šฉ๋˜๊ณ  ๊ผญ ์•Œ์•„๋‘์–ด์•ผ ํ•  ๋ฉ”์„œ๋“œ๋“ค์ด๋ผ๋Š” ์ƒ๊ฐ์— ๊ทธ๋ž˜๋„ ์ฒœ์ฒœํžˆ ๊ณต๋ถ€๋ฅผ ํ–ˆ๋‹ค. ์ด ๊ธฐํšŒ๋กœ ๊ณ ์ฐจํ•จ์ˆ˜๋„ ๋ณด์ด๋Š”๋Œ€๋กœ ๋ฐ”๋กœ ๋ฐ”๋กœ ๊ฐœ๋…์„ ์ฐพ์•„ ์ดํ•ดํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•ด์•ผ ๊ฒ ๋‹ค.

'๐Ÿ“š Language & CS knowledge > Algorithm (ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค)' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

ํฐ ์ˆ˜ ๋งŒ๋“ค๊ธฐ  (0) 2022.10.24
ํ”„๋ฆฐํ„ฐ  (0) 2022.10.21