์ค๋์ ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ ๋ฌธ์ ์ค ๊ฐ์ฅ ๊ธฐ์ด์ ์ธ ๋ฌธ์ ์ค ํ๋๋ฅผ ํ์ด๋ดค์ต๋๋ค.
๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ์ ํฐ ๋ฌธ์ ๋ฅผ ์์ ๋ฌธ์ ๋ค๋ก ํด๊ฒฐํ ์ ์๋ ๊ฒฝ์ฐ ์ฌ์ฉํ ์ ์๋ ์๊ณ ๋ฆฌ์ฆ ๊ธฐ๋ฒ์ ๋๋ค.
์ ๊ทผ
1003๋ฒ์์๋ f(0)๊ณผ f(1)์ด ํธ์ถ๋๋ ํ์๋ฅผ ๊ตฌํ๋ผ๊ณ ํฉ๋๋ค. ์ ํ์๊ฐ์ ๋ณด์๋ฉด 0.25์ด ์ ๋๋ค. ๋ฌธ์ ์ ๋์ ์๋๋๋ก ์ฌ๊ทํจ์๋ก ๊ตฌ์ฑํ๋ฉด 100% ์๊ฐ์ด ๋ถ์กฑํฉ๋๋ค. ์๋ํ๋ฉด ๊ทธ๋ฆผ๋๋ก๋ผ๋ฉด O(2^n)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๊ณ ์๋๋ฐ (์ด๋ ํจ์ ํธ์ถ์ ๊ทธ๋ํ๋ก ๊ทธ๋ฆฌ๋ฉด ๋ต์ด ๋์ต๋๋ค.) n์ 40์ดํ์ ๋๋ค. 2^40์ ๋๋ต 1000000000000 ์ ๋๋ค. 10์ต์ ์ฐ์ฐ์ 1์ด๋ก ์ํํ๋ค๊ณ ํ๋ฉด 0.25์ด๋ฅผ ํจ์ฌ ์ด๊ณผํฉ๋๋ค.
์ด๋ ์ ์ฉํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ, ๋์ ๊ณํ๋ฒ์ ๋๋ค.
๊ทธ ์ค์์๋ bottom up ๋ฐฉ์์ผ๋ก ๋ฌธ์ ๋ฅผ ํ๋ฉด ๋งค์ฐ ๋น ๋ฅด๊ฒ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค.
๋ฐฉ์
dp๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ๋ก ์ ํ์ต๋๋ค. n์ด 40 ์ดํ์ด๊ณ , ์ด๋ ์์ ์ซ์์ด๋ ๋ฆฌ์คํธ๋ฅผ ์์ฑํ๊ณ ์ธ๋ฑ์ค 40๊น์ง bottom up ๋ฐฉ์์ผ๋ก ๊ฐ์ ์ฑ์๋๊ฐ๋ฉด ์ข๊ฒ ๋ค๊ณ ์๊ฐํ์ต๋๋ค.
f(1) ํธ์ถํ์์ ๊ฒฝ์ฐ๋ ์ธ๋ฑ์ค๊ฐ 0์ด๋ฉด 0, 1์ด๋ฉด 1์ ๋๋ค. f(2)๋ถํฐ๋ f(1) + f(0)์ ํ์์ด๊ธฐ ๋๋ฌธ์ ์ฝ๊ฒ ๊ตฌํ ์ ์์ต๋๋ค.
๊ตฌํ
๋ฐ๋ผ์ ์ ๋ ์๋์ ๊ฐ์ด ๊ตฌํ์ ํ์์ต๋๋ค.
d0 = [0]*41
d1 = [0]*41
d0[0] = 1
d1[1] = 1
for i in range(2,41):
d0[i],d1[i] = d0[i-1]+d0[i-2],d1[i-1]+d1[i-2]
t = int(input())
s = ''
for i in range(t):
n = int(input())
s += str(d0[n])+' '+str(d1[n])+'\n'
print(s)
'์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค 2720๋ฒ: ์ธํ์ ์ฌ์ฅ ๋ํ - ํ์ด์ฌ (0) | 2021.10.20 |
---|---|
์์ฃผ ์ฌ์ด dp์๊ณ ๋ฆฌ์ฆ์ ๋ฐฑํธ๋ํน์ผ๋ก ํผ ๋.. [๋ฐฑ์ค]9095 (ํ์ด์ฌ (0) | 2021.08.06 |
[CodeUp] 6052 ~ 6056 ๋ฌธ์ ํ์ด with Python (0) | 2021.07.01 |
[BOJ ๋ฐฑ์ค 11051] ์ดํญ๊ณ์ 2 with python (0) | 2021.06.09 |
ํฐ ์์ ๋ง์ (0) | 2021.06.09 |