๐ข 11. Recursion & Dynamic programming
โญ ๋ฌด์ํ ๋ฐฉ๋ฒ (brute force)
1
countWay(n-1) + countWays(n-2) + countWays(n-3)
- ์ด๊ธฐ ์ฌ๋ก(base case) ์ค์ํจ
- ํ์ฌ ๋๊ณ ์๋ ๊ณ๋จ์ด 0๋ฒ์งธ ๊ณ๋จ์ด๋ผ๊ณ ํ๋ฉด, ์ฌ๊ธฐ๊น์ง๋ 0๊ฐ์ ๊ฒฝ๋ก๊ฐ ์๋๊ฑธ๊น? 1๊ฐ์ ๊ฒฝ๋ก๊ฐ ์๋๊ฑธ๊ฐ?
- ์ ๋ต์ ์ ์ํ๊ธฐ ๋๋ฆ
- 1๋ก ์ ์ํ๋ ๊ฒ์ด ๋ฌธ์ ํ๊ธฐ ๋ ์ฝ๋ค
1 2 3 4 5 6 7 8 9
int countWays(int n) { if (n < 0) { return 0; } else if (n == 0) { return 1; } else { return countWays(n-1) + countWays(n-2) + countWays(n-3); } }
- ์๊ณ ๋ฆฌ์ฆ์ ์ํ ์๊ฐ์ ์ง์์ ์ผ๋ก ์ฆ๊ฐํ๋ค
- ์ฌ๊ท ํธ์ถ ์ธ๋ฒ ํจ
โญ ๋ฉ๋ชจ์ด์ ์ด์ ๋ฐฉ๋ฒ
- countWays๊ฐ ๋ถํ์ํ๊ฒ ์ค๋ณต ํธ์ถ๋๋ ๊ฒฝ์ฐ ์์
- n์ ์ด์ ์ ๋ณธ ์ ์ด ์๋ค๋ฉด ์บ์์ ์ ์ฅ๋ ๊ฐ์ ๋ฐํํด์ฃผ๋ฉด ๋๋ค
- ๊ฐ์ ์๋ก ๊ณ์ฐํ ๋๋ง๋ค ์ด๋ฅผ ์บ์์ ์ ์ฅํด๋๋ค
- ์ผ๋ฐ์ ์ผ๋ก ์บ์๋ฅผ ์ฌ์ฉํ ๋ HashMap ์ฌ์ฉํจ
- ํค ๊ฐ์ด ์ ํํ๊ฒ 1๋ถํฐ n๊น์ง์ ์ ์๊ฐ์ด๋ฏ๋ก ์ ์ ๋ฐฐ์ด์ ์ฌ์ฉํ๋ ๊ฒ ๊ณต๊ฐ ๋ฉด์์ ๋ ํจ์จ์ ์ด๋ค
โญ ์ฐ๊ด ๋ฌธ์ : ์ค๋ณต๋ ๊ฐ์ ํ์ฉํ๋ค๋ฉด ์ด๋ป๊ฒ ํ๊ฒ ๋๊ฐ
- ์์๋ค์ด ์ค๋ณต๋์ด ๋ํ๋๋ฉด ์๊ณ ๋ฆฌ์ฆ์ ์ ๋๋ก ๋์๋์ง ์๋๋ค
- ํด๋ฒ 1: ์ฌ๊ท
- ์ด๊ธฐ ์ฌ๋ก๋ก๋ถํฐ์ ํ์ฅ
- ์ต์ ํ๋ฅผ ์ํ๋ค๋ฉด ์ฌ๊ท๊ฐ ์๋ ๋ฐ๋ณต๋ฌธ ์ฌ์ฉ
- ํด๋ฒ 2: ์กฐํฉ๋ก
- ์งํฉ ์์ฑํ ๋ ์์ ๊ฐ๊ฐ์ ๋ํด ๋ ๊ฐ์ง ์ค ํ ๊ฐ์ง ๊ฒฐ์ ํด์ผ ํจ
- ์งํฉ์ ์ํ๋์ง or ์ํ์ง ์๋์ง
- 2^n ๊ฐ์ ๋ชจ๋ ๊ฐ๋ฅํ ๋ถ๋ถ ์งํฉ์ ๊ตฌํ ์ ์๋ค
- ํด๋ฒ 1: ์ฌ๊ท
This post is licensed under CC BY 4.0 by the author.