๐๋๋๋ฆฌ
๋ ๊ฐ์ด ์ค๋ ฅ์ด ๋ถ์กฑํ ์ฌ๋์ ๋ณธ๋ ์์ฌ์ฝ๋(suedo-code)๋ฅผ ์์ฑํ๊ฑฐ๋, ๊ทธ๋ฆผ์ ๊ทธ๋ ค์ ์ฝ๋๊ฐ ์ด๋ป๊ฒ ๋์๊ฐ๋์ง ์ถฉ๋ถํ ์๊ฐํด๋ณด๊ณ ์ฝ๋๋ฅผ ์งค ํ์๊ฐ ์๋๋ฐ... ๋ถ๋ช
์น์
2๊ฐ ๋๋๊ณ ๊ต์ฅํ ์์ ๊ฐ์๊ฒ ์์ํ ์น์
3์ธ๋ฐ ๋๋ฌด๋๋ ์ฒ์ฐธํ ๋ชฐ๊ณจ์ด ๋์ด๊ฐ๊ณ ์๋ค...(๊ณ ์ 2์ผ์ด ์ง๋ฌ๋๋ฐ ๋จ๋จํ์ค ์์๋ ๋ด ๋ฉํ์ด ์ฌ๊ฐํ๊ฒ ๋ถ์์ ธ์๋ค..ใ
ใ
ใ
ใ
)
์ฌ๊ท ํํธ๊ฐ ์์ ๋์ฌ์ ธ์๋์ค ๋ชจ๋ฅด๊ณ ๊ธฐ๋ณธ์ ์ธ ์ฌ๊ทํจ์์ ๋ํด ์๊ณ ๋ฆฌ์ฆ ์ฑ ์ ๋ณด๋ฉด์ ๋ฉฐ์น ์ ์ ๊ณต๋ถํํฐ๋ผ ์ฝ๊ฐ ์์ ๊ฐ์ด ์์๋๋ฐ...๐(๊ณ ์ ๋ฉฐ์น ๋จผ์ ๋ณธ๊ฑด๋ฐ ์ค๋งํ๋ค ์ค๋งํด;;)
๋ถ๋ช ์ฌ์ด๋ฌธ์ ๋ค์ ๊ธ๋ฐฉ ์ดํดํด์ ์ฅ์ฅ ํ๋ฆฌ๋๋ฐ ์์ ๋งํ๋๋ก ์กฐ๊ธ๋ง ์ฒด๊ณ์ ์ผ๋ก ํ๋ ค๊ณ ํ๋ฉด ์์ง ๋ฌธ์ ํด๊ฒฐ์ ๋๋ง์ ๊ณต์์ด ์ ๋๋ก ์ ๋ฆฝ๋์ง์์์ ์ฐ์์ข์ํ๋ ๊ฒฝ์ฐ๊ฐ ๊ฝค ๋ง์ ๊ฒ ๊ฐ๋ค.
โ๏ธ์ค๋์ ์์ ํฌ์ธํธ!!
1. ์ฌ๊ทํจ์ ํ์ฉํ ๋ฌธ์ 2๋ฌธ์ ์์ฌ์ฝ๋ ์์ฑํ๋ฉฐ ์ฐ๊ฒฐ๋ ๊ฐ๋ ๊น์ง ๊ณต๋ถํด๋ณด๊ธฐ
2. ๋ฌธ์ ํด๊ฒฐ๋ฅ๋ ฅ ํฅ์์ ์ํ ๊ณ ์ฐฐ
3. DOM ํ์ฉ์ ๋ํ ๋ณต์ต(์ด๋ผ์ฐ๊ณ ๋ฐ์ฑ์ด๋ผ ์ฝ๋๋ค)
์ฒซ๋ฒ์งธ ๋ฌธ์
Q1. ํผ๋ณด๋์น ์์ด
์(num)๋ฅผ ์
๋ ฅ๋ฐ์ ํผ๋ณด๋์น ์์ด์ num๋ฒ์งธ ์์๋ฅผ ๋ฆฌํดํด์ผํ๋ค.
์กฐ๊ฑด
- ํจ์๋ ์ฌ๊ทํจ์ ํํ๋ก ์์ฑํด์ผํ๋ค.
- ๋ฐ๋ณต๋ฌธ ์ฌ์ฉ์ ๊ธ์ง!!
- ํผ๋ณด๋์น ์์ด์ 0๋ถํฐ ์์ํ๋ค.
๋จผ์ ์์ฌ์ฝ๋ ์์ด ์ค์ฅํ๊ณ ์์ฑํ ๋์ ์ฝ๋๋ก๋ถํฐ ๊ท๋ฉ์ ์ผ๋ก ์ ๊ทผํด๋ณด์.
function fibonacci(num) {
// num > num๋ฒ์งธ ์์
// 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ...
// 21 + 34 = 55
if(num===0) return 0 // ํผ๋ณด๋์น ์ฒซ๋ฒ์งธ ์์
if(num===1) return 1 // ๋๋ฒ์งธ ์์
return fibonacci(num-2) + fibonacci(num-1)
}
์๋ฌด ์๊ฐ์์ด ๋ฐ๋ก ์์ฑํ์ง๋ ์๊ณ ์ฃผ์ 3์ค์๋ณด๋ฉด ๋๋ฆ ์๊ฐ์ ํ๊ธด ํ๋ค...
์ผ๋จ ์ ๋ ฅ๊ฐ์ด ๋ฌด์์ด๊ณ ์ต์ข ์ ์ผ๋ก ์ถ๋ ฅํด์ผํ๋ ๊ฒ์ด ๋ฌด์์ธ์ง์ ๋ํด num์ด ์ ๋ ฅ๋ ๊ฒฝ์ฐ num๋ฒ์งธ ์์๋ฅผ ์ถ๋ ฅํด์ผํ๋ค๋ ๋ฐฉํฅ์ ์ ์ก์๋ค. ๊ทธ๋ฆฌ๊ณ ์๋ ์ด๋ฐ์ ํผ๋ณด๋์น ์์ด์ด ์งํ๋๋ ์ํฉ์ ๋์ดํด๋๊ณ 3๋ฒ์งธ ์ค์๋ ๋ฆฌํด๊ฐ์ด ์ด๋ค ํํ๋ฅผ ๋์ด์ผํ ์ง ํ์ํ๊ธฐ ์ํด ์ ์ด๋์๋ค.
21 + 34 => 55 ์ ๊ฐ์ ๋ต์ด ๋ฆฌํด๋๋ ค๋ฉด n-2๋ฒ์งธ ์์์ n-1๋ฒ์งธ ํผ๋ณด๋์น ์์ ํฉ์ ๋ฆฌํดํด์ผํ๋ค.
๊ทธ๋ฆฌํ์ฌ return์ ์ ๊ณ ํจ์ fibonacci์ n-2์ n-1์ ์ธ์๋ก ์ ๋ฌํ ํจ์๋ฅผ + ์ฐ์ฐ์๋ก ๋ ๋ค ์คํ๋๋๋ก ํ์๋ค.
์ด๋ ๊ฒ ๋ณด๋ฉด ๋๋ฆ ์ ํ์์ง๋ง,, ์ด๋ ค์ด ๋ฌธ์ ๋ฅผ ๋ง๋์๋ง์ ๋ฐ๋ก ๋ฐ๋ฅ์ด ๋๋ฌ๋ฌ๋ค. ๊ทธ๋์ ์ด ๋ฌธ์ ๋ถํฐ base case, recursive case ์ด๋ ๊ฒ ๋ ๊ฐ์ง๋ก ๊ตฌ๋ถํด์ ๋ค์ ์์ฌ์ฝ๋๋ฅผ ์์ฑํด๋ณด๊ณ ํผ๋ณด๋์น๋ฅผ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ํ์ด์ ๊ณ์ฐ๋ณต์ก๋(big O)๋ฅผ ๊ฐ์์ํฌ ์ ์๋ ๋ฐฉ๋ฒ์ด ์๋์ง ์์๋ณธ ๋ค, ๋ ์ด๋ ค์ด ๋ฌธ์ ์๋ ๋์ผํ ๋ฐฉ์์ผ๋ก ์์ฌ์ฝ๋๋ฅผ ์์ฑํด๋ณด๊ฒ ๋ค.
์ผ๋จ, base case๋ ์ฌ๊ทํจ์๊ฐ ์คํ๋๋ ๊ฒ์ด ์ข ๋ฃ๋๋ ์กฐ๊ฑด์ผ๋ก... ๋ถํ์ํ๊ฒ ๋ฐ๋ณต๋ 5,6๋ฒ์งธ ์ค์ ์์ถํ๋ฉด
if(n <= 1) return n;
์ด๋ ๊ฒ ์ฒซ๋ฒ์งธ ์์์ ๋๋ฒ์งธ ์์์ ๊ฐ์ด ์ ๋ ฅ๋ ๊ฒฝ์ฐ n๊ฐ์ ๋ฆฌํดํ๋ฉฐ ์ข ๋ฃํ๊ฒ ๋๋ค.
๋ฐ๋ผ์ fibonacci(0), fibonacci(1) ์ด๋ ๊ฒ ์ ๋ ฅ๋๋ฉด 0๊ณผ 1์ ๋ฆฌํดํ๊ฒ ๋๋ค. ํผ๋ณด๋์น ์๋ ์ด ๋ ๊ฐ์ง๋ง ์์ผ๋ฉด ๋ญ๋ ์ง ๋ง๋ค ์ ์๋ค.
์ด์ recursive case ์ฆ, ๋ฐ๋ณต ์คํ๋ ์ฝ๋๋ฅผ ๋ง๋ค์ด ๋ณด์. base case์ ๋๋ฌํ๊ธฐ ์ํด์๋ ๋์ผํ ์ธ์๋ฅผ ๋ฆฌํดํ๋ฉด ์๋ ๊ฒ์ด๊ณ ์ ์ base case์ ์ ๊ทผํ๋๋ก ์ฝ๋๋ฅผ ์ง์ผํ๋ค. ํผ๋ณด๋์น์ ๊ฒฝ์ฐ ๋ด๊ฐ ๊ตฌํ๊ณ ์ถ์ ๊ฐ์ด 10๋ฒ์งธ๋ผ๊ณ ํ๋ค๋ฉด 10๋ฒ์งธ๋ 8๋ฒ์งธ์ 9๋ฒ์งธ์ ํฉ์ด๊ณ ์ด๋ฅผ ์์ผ๋ก ํฌํํ๋ฉด
'ํจ์ fibonacci์ n-2์ n-1์ ์ธ์๋ก ์ ๋ฌํ ํจ์'๋ผ๊ณ ์ ์๋ ๋ถ๋ถ์ด๋ค.
fibonacci(n) === fibonacci(n-1) + fibonacci(n-2)
fibonacci(10) === fibonacci(9) + fibonacci(8)
fibonacci(9)๋ 8,7๋ฒ์งธ ์์์ ํฉ์ผ๋ก ๋๋๊ณ 8์ 6,7๋ฒ์งธ ์์์ ํฉ์ผ๋ก ๋๋๋ฏ๋ก, ์ด๋ฅผ ์๊ณผ ๊ทธ๋ฆผ์ผ๋ก ํํํ๋ฉด
fibonacci(10) === fibonacci(9) + fibonacci(8) === fibonacci(8) + fibonacci(7) + fibonacci(7) + fibonacci(6) ...
์ด๋ ๊ฒ base case๊ฐ ์๋ ๋ฐ๋ฅ๊น์ง ๋๋ฌํ๊ฒ ๋๋ค.
์๋ฌด์๊ฐ์์ด ์ง 4์ค์ ์ฝ๋์ ์๋์ ์ค๋ช ํ๋๋ฐ ๊ฝค๋ ๋ณต์กํ ๊ณผ์ ์ด ํ์ํ๋ค.(์ฌ์ค ๋ณด์ด์ง ์๊ฒ ์ผ์ด๋๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ค๋ฅธ ๊ธฐ๋ฅ์ด๋ ๊ฐ๋ ๋ค์ ํจ์ฌ ๋ณต์กํ๋ฏ๋ก ์ด์ ๋๋ฉด ๊ฐ๋จํ๋ค๊ณ ํด์ผํ ๊ฒ ๊ฐ๋ค.)
๋ค๋ฅธ ํ์ด๋ฒ ์์๋ณด๊ธฐ
์์์ผ๊ณผ ๋ชฉ์์ผ์ ํ์ด์ผํ๋ ์ฝํ๋ฆฟ๋ฌธ์ ์๋ ์ฐ๊ด์ด ์๋๋ฐ ํผ๋ณด๋์น ์์ด์ ๊ณ์ฐ ๋ณต์ก๋๋ฅผ ์์ ๊ฐ์ ๋ฐฉ์๋ณด๋ค ํจ์ฌ ์ค์ผ ์ ์๋ ๋ค์ํ ๋ฐฉ๋ฒ์ ๋ํด ํ์ํด๋ณด์.
1. ๋์ ๊ณํ๋ฒ์ ๋ฐ๋ฅธ big-O ์ค์ด๊ธฐ
https://velog.io/@polynomeer/%EB%8F%99%EC%A0%81-%EA%B3%84%ED%9A%8D%EB%B2%95Dynamic-Programming
2. ๊ผฌ๋ฆฌ์ฌ๊ทํจ์
๊ผฌ๋ฆฌ์ฌ๊ทํจ์์ ๋ํด์๋ ๊ณต๋ถ๋ ๋ถ์กฑํ๊ณ ๋ฌด์๋ณด๋ค๋ ํ์ฌ Javascript์์ ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก ๋ค์์ ๊ธฐํ๊ฐ๋๋ฉด ๋ค๋ค๋ณด๊ธฐ๋ก ํ๊ณ , ๋์ ๊ณํ๋ฒ์ ํ์ฉํ๋ฉด ํ๋ฒ ๊ณ์ฐํ ํผ๋ณด๋์น ์๋ฅผ ๊ธฐ์ตํด๊ฐ๋ฉด์ call stack์ ์ค์ผ ์ ์๊ณ ์ด๋ ๊ณ์ฐ ๋ณต์ก๋ ๊ฐ์๋ก ์ด์ด์ง๋ค.
์์ธํ ์ฝ๋๋ ๋ด์ผ TIL์ ๋์ ๊ณํ๋ฒ์ ๋ํ ๋ด์ฉ๊ณผ ํจ๊ป ๋ ์ ์ด๋ณด๊ณ ์ ํ๋ค.
๋๋ฒ์งธ ๋ฌธ์
Q2. flattenArr
๋ค์ฐจ์ ๋ฐฐ์ด์ ์
๋ ฅ๋ฐ์ 1์ฐจ์ ๋ฐฐ์ด๋ก ๋ณํํ์ฌ ๋ฆฌํดํด์ผ ํฉ๋๋ค.
์กฐ๊ฑด
- ํจ์ flattenArr๋ ์ฌ๊ทํจ์์ ํํ๋ก ์์ฑํฉ๋๋ค.
- Array Method flat()๊ณผ flatMap() ์ฌ์ฉ์ ๊ธ์ง๋ฉ๋๋ค.
- ๋ฐ๋ณต๋ฌธ(for, while) ์ฌ์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค.
- ์ ๋ ฅ๋ฐ์ ๋ฐฐ์ด์ ํจ์์ ํธ์ถ ๋ค์๋ ์ฒ์ ์ํ๋ฅผ ์ ์งํด์ผ ํฉ๋๋ค(immutability).
- ์ ๋ ฅ์ผ๋ก ์ ๋ฌ๋๋ ๋ค์ฐจ์ ๋ฐฐ์ด์ด ์ค์ฒฉ๋ ์ ๋(์ค์ฒฉ์ ๊น์ด)๋ ์ ํด์ ธ ์์ง ์์ต๋๋ค.
- ๋น ๋ฐฐ์ด์ ์ ๋ ฅ๋ฐ์ ๊ฒฝ์ฐ, ๋น ๋ฐฐ์ด์ ๋ฆฌํดํด์ผ ํฉ๋๋ค.
์์ฌ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ ์ ๋จผ์ ๋ฌธ์ ์ ์ ์๋ ํจ์์ ์ด๋ฆ๊ณผ ์กฐ๊ฑด์ ์ดํด๋ณด๋ฉด, flat์ด๋ผ๋ ๋ฉ์๋๊ฐ ์์๋ค๋ ์ฌ์ค์ ์ ์ ์๋ค.(๋๋ ๋ชฐ๋๋ค...)
flat์ ๋ณต์ฌํ๋ ๋ฉ์๋๋ก์ ์๋ณธ์ ํด์น์ง ์๊ณ ()์์ ์ฃผ์ด์ง ์ ๋ฌ์ธ์์ ๊ฐ๋งํผ ๋ฎ์ ์ฐจ์์ ๋ฐฐ์ด์ ๋ฆฌํดํ๋ค. ์์ธํ ๋ด์ฉ์ ๊ณต์๋ฌธ์์ ๋ ์ ์ฐ์ฌ์๋ค.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat
Array.prototype.flat() - JavaScript | MDN
The flat() method creates a new array with all sub-array elements concatenated into it recursively up to the specified depth.
developer.mozilla.org
์ฐ๋ฆฌ๋ ์กฐ๊ฑด์ ์ฃผ์ด์ง๋๋ก flat๊ณผ flatMap ๋ฉ์๋๋ ์ฌ์ฉํ์ง ์์ ๊ฒ์ด๊ณ , ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ์ฌ ํด๊ฒฐํ ๊ฒ์ด๋ค. immutability ์ญ์ ์ง์ผ์ผํ๋ฉฐ ๋น ๋ฐฐ์ด์ ์ ๋ ฅ๋ฐ์ ๊ฒฝ์ฐ ๋น ๋ฐฐ์ด์ ๋ฆฌํดํ๋ ๊ฒ๊น์ง ๊ณ ๋ คํ์ฌ ์ฝ๋๋ฅผ ์์ฑํด์ผ ํ๋ค.
์์ฌ์ฝ๋
1. ๋ค์ฐจ์์ ๋ฐฐ์ด์ด ์ฃผ์ด์ง๊ณ , ์์ ์ค์๋ ๋ค์ฐจ์ ๋ฐฐ์ด์ด ์๋ ๊ฒฝ์ฐ๋ ์๋๋ฐ ๊ฐ๊ฐ์ ์์์ ๋ฐฐ์ด [ ]๋ฅผ ๋ค ํ๊ณ 1์ฐจ์ ๋ฐฐ์ด์์ ์์์ ์๋ค์ด ๋์ด๋ ๋ฐฐ์ด์ ์ต์ข ๊ฐ์ผ๋ก ๋ฆฌํดํด์ผํ๋ค.
2. base case๋ ๋ฐฐ์ด์์ ์์ ์ค์ ๋ฐฐ์ด์ด ํ๋๋ ์๋ ๊ฒฝ์ฐ์ ํด๋น ๋ฐฐ์ด์ ๋ฆฌํดํ๋ฉด ๋๋ค.
3. recursive case๋ for ๋ฌธ์ ์ฌ์ฉํ์ฌ ๋ฐฐ์ด์์ ์์ ํ๋ํ๋๋ฅผ ์ํํ๋ฉด์ ๋ฐฐ์ด์ ๋ง๋ ๊ฒฝ์ฐ ๋ฐฐ์ด์ ํ ์ฐจ์ ๋ฎ์ถ๋ค.
3-2. ๋ค์ฐจ์ ๋ฐฐ์ด์ ๋ง๋ ๊ฒฝ์ฐ ํ๋ฒ์ 0์ฐจ์ ์์์ ์ ์์๋ก ๋ง๋ค์ด๋ ๋์ง๋ง ์ด๋ฒ์ ์ฃผ์ด์ง ํ ์คํธ ์ผ์ด์ค์ ๋ฐ๋ฅด๋ฉด ๋ฐฐ์ด์ด ์ค์ฒฉ๋ ์์ ์ ์ฌํ๊ฒ ํจ์๊ฐ ํธ์ถ๋์ด์ผํ๋ฏ๋ก ์ด ๋ฐฉ์์ ์ฌ์ฉํ์ง ์๋๋ค.
4. ํจ์ ๋งจ ์ฒ์์ ๋น ๋ฐฐ์ด์ ์๋ก์ด ๋ณ์๋ก ์ ์ธํ๊ณ for๋ฌธ์ด ๋ค ์ข ๋ฃ๋ ํ์ ๋น ๋ฐฐ์ด์ ์ถ๊ฐ๋ ์์๋ค์ ์ต์ข ์ ์ผ๋ก ๋ฆฌํดํ๋ค.
์ด ๋ ์๋ฌธ์ด ๋๋ ์ง์ ์ด ์๊ธธ ์ ์๋ค. ๊ณผ์ฐ flattenArr() ์ด ํจ์๋ ์ธ์ ์ฌ๊ท์ ์ผ๋ก ํธ์ถ๋์ด์ผํ๋๊ฐ์ด๋ค. ์ด๋ ์๊ฐํด๋ณด๋ฉด ๋จ์ํ๋ค. ์ด๋ค ํ์๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ํด์ ์ด๋ค ์ํ๋ก ๋์๊ฐ์ผ ํ๋๊ฐ๋ฅผ ์๊ฐํด๋ณด๋ฉด ๋๋ค. ๋ฐฐ์ด์ด ๊ฒน๊ฒน์ด ์ธ์ฌ ์๋ ๊ฒ์ ์ ์ ์ค์ฌ์ ์์์ ์๋ง ๋จ๊ฒ ํด์ผํ๋ค. ๋ง๊ทธ๋๋ก recursive case์ ๋ฐ๋ณต์ ํตํด base case์ ๋ค๋ค๋ฅด๋ ์๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ํผ๋ณด๋์น๋ณด๋ค ์ข ๋ ๋ณต์กํ๊ฒ ๋๊ปด์ง๋ ์ด ๋ฌธ์ ๋ ๊ฝค ๊ฐ๋จํ๊ฒ ํด๊ฒฐํ ์ ์๋ค.
recursive case๊ฐ for๋ฌธ ์์ ์๊ณ (์ ํํ๋ for๋ฌธ์ ์ผ๋ถ๋ถ์ด๋ผ๊ณ ํด์ผ๊ฒ ๋ค.) ๋ฐฐ์ด์ ๋ง๋๋ฉด ๋ฐ๋ณต๋๋ ์กฐ๊ฑด์ด๋ฏ๋ก for ๋ฌธ ์์์ ์ํ๋ฅผ ๋๊ณ ์๋ ์์๊ฐ ๋ฐฐ์ด์ธ์ง ์๋์ง์ ๋ฐ๋ผ ๋ถ๊ธฐ๋ฅผ ๋๋์ด์ฃผ์ด์ผํ๋ฉฐ, ๋ฐฐ์ด์ธ ๊ฒฝ์ฐ์ ๋ค์ ํจ์๊ฐ ํธ์ถ๋๋๋ก ํ๊ณ ์ํ๋ฅผ ๋๋ ์์๊ฐ ์ ๋ถ ์์ ์ ์์ธ ๊ฒฝ์ฐ for๋ฌธ์ด ์ข
๋ฃ๋ ์ ์๋๋ก ํ์ฌ for ๋ฌธ ๋ค์์ ์๋ ์ต์ข
๋ฆฌํด๋ฌธ์ด ์คํ๋๋๋ก ํ๋ค.
'study > TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TIL No.17] React_CDD, CSS_in_js (0) | 2023.02.20 |
---|---|
[TIL No. 16] ํผ๊ทธ๋ง(Figma) ํด๋ก (1) | 2023.02.17 |
[TIL No. 15] ํผ๊ทธ๋ง(Figma) ํด๋ก ์ค๋น (0) | 2023.02.16 |
TIL 2์ผ์ฐจ(FEB 30์ผ์ฐจ) (0) | 2023.01.14 |
TIL 1์ผ์ฐจ(FEB 29์ผ์ฐจ) (1) | 2023.01.13 |