์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- CSS
- Flex
- ์๊ณ ๋ฆฌ์ฆ
- REACT
- ์๋ฐ์คํฌ๋ฆฝํธ
- useEffect
- Gatsby
- ๋ธ๋ก๊ทธ
- Props
- fetch API
- ๋ฐ๋ธ์ฝ์ค3๊ธฐ
- ํ๋ก ํธ์๋
- ์ฝ๋ฉํ ์คํธ
- ๋ฐ๋ธ์ฝ์ค
- history api
- ํ๋ก๊ทธ๋๋จธ์ค
- float
- useRef
- position
- Today
- Total
Daehyunii's Dev-blog
๋ฒ ์คํธ ์จ๋ฒ, ๊ณ ์ฐจ ํจ์ ์ ๋ฆฌ ๋ณธ๋ฌธ
๋ฒ ์คํธ ์จ๋ฒ, ๊ณ ์ฐจ ํจ์ ์ ๋ฆฌ
Daehyunii 2022. 10. 21. 23:08์ถ์ฒ : ํ๋ก๊ทธ๋๋จธ์ค https://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()); // ๊ฐ ์์์ ํค๋ฅผ ๋ชจ์ ์ดํฐ๋ฌ๋ธ ๊ฐ์ฒด๋ฅผ ๋ฐํ
์ด๋ฅผ ์ ํ์ฉํ๋ฉด ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์์
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 |