์ ๋ ฅ
์ฒซ์งธ ์ค์ ํ ์คํธ ์ผ์ด์ค์ ๊ฐ์ T๊ฐ ์ฃผ์ด์ง๋ค. ๊ฐ ํ ์คํธ ์ผ์ด์ค๋ ํ ์ค๋ก ์ด๋ฃจ์ด์ ธ ์๊ณ , N์ด ์ฃผ์ด์ง๋ค. (1 ≤ N ≤ 100)
์ถ๋ ฅ
๊ฐ ํ ์คํธ ์ผ์ด์ค๋ง๋ค P(N)์ ์ถ๋ ฅํ๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ
์ฒ์ ๋ค์ด๋ณด๋ ์๋ก์ด ์์ด์ด์ง๋ง ๊ทธ ๊ท์น์ ํผ๋ณด๋์น์ ๋น์ทํ๋ค.
ํผ๋ณด๋์น์ ์ ํ์์ด f(n) = f(n-1) + f(n-2) ์๋ค๋ฉด
N | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
P(N) | 1 | 1 | 1 | 2 | 2 | 3 | 4 | 5 | 7 |
ํ๋๋ฐ์ ์ ํ์์ f(n) = f(n-2) + f(n-3) ์์ ์ ์ ์๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ
์ด๋ฒ ๋ฌธ์ ๋ถํฐ๋ C++๋ก ํ์ด๋ณด๋ ค๊ณ ํ๋ค.
๋ฌธ์ ํ์ด์ ์๊ด์๋ ๋ด์ฉ์ด์ง๋ง 2ํ๊ธฐ ๋ ์๊ณ ๋ฆฌ์ฆ ๊ณผ๋ชฉ์์ ์ฒ์์ผ๋ก ํ์ด์ฌ์ ์ ํ๊ณ ์ง๊ธ๊น์ง ๋ณต์ต, ๋ฐฑ์ค ๋ฌธ์ ํ์ด, ๋ชจ๊ฐ์ฝ ๋ฑ์์ ๊ณ์ ํ์ด์ฌ๋ง ์ผ์๋ค. ์ด์ฏคํ๋ฉด ํ์ด์ฌ์ ์ถฉ๋ถํ ๊ฒ ๊ฐ๋ค๊ณ ํ๋จํ๊ณ , ์ฌ์ค ์ฃผ ์ธ์ด๋ก ์ฐ๊ธฐ์๋ ํผํฌ๋จผ์ค๋ ๊ธฐํ ๋ฑ๋ฑ์์ ์กฐ๊ธ ๋ณ๋ก๋ผ๊ณ ์๊ฐํด์ ์์ผ๋ก 2ํ๊ธฐ ๊ฐ์ง์ค ๋ ๋ฐฐ์ด C++๋ก ํ์ด๋ฅผ ํด๋ณด๋ ค๊ณ ํ๋ค. ๋ณต์ต ๊ฒธ ๊ณต๋ถ?
ํด๊ฒฐ ๊ณผ์
๋ง์ด ๊ธธ์์ง๋ง ์๋ฌดํผ ์์์ ๊ตฌํ ์ ํ์์ ๊ทธ๋๋ก ๊ตฌํํ๋ฉด ๋๋ค. ์ฒ์์๋ vector๋ฅผ ์ฌ์ฉํ๋ค.
๋ฐฐ์ด์ ์ฌ์ฉํด๋ ๋์ง๋ง vector๋ฅผ ์ฌ์ฉํด๋ณด๊ณ ์ถ์๋ค.
vector์ ์ฌ์ฉํด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ์ดํ์ ๋ฐฐ์ด์ ์ฌ์ฉํ๋ฉด ๋ฉ๋ชจ๋ฆฌ๋ ์๊ฐ์ด ์ค์ด๋ค๊ฑฐ๋ผ๋ ์๊ฐ์ ๋ฐฐ์ด๋ก ๊ตฌํํด๋ดค๋๋ฐ ๋๊ฐ์๋ค...!
์ ๊ทธ๋ฆฌ๊ณ ์ฃผ์ํ ์ , vector๋ ๋ฐฐ์ด์ ์ ์ธํ ๋ ์๋ฃํ์ long long์ผ๋ก ํด์ค์ผ์ง ๋ฌธ์ ๋ฅผ ํต๊ณผํ ์ ์๋ค.
์ต์ข ์ฝ๋๋
#include <iostream>
#include <vector>
using namespace std;
int main(){
vector<long long> p;
p.push_back(1);
p.push_back(1);
p.push_back(1);
int t;
int n;
cin >> t;
int i = 0;
while (i < t){
cin >> n ;
if (n <= 3) {
cout << 1 << endl;
}
else {
for(int j = p.size(); j <= n; j++){
p.push_back(p[j-2]+p[j-3]);
}
cout << p[n-1] << endl;
}
i++;
}
return 0;
}
ํ์ด์ฌ์ผ๋ก๋ ํ ๋ฒ ํ์ด๋ดค๋ค.
def main():
t = int(input())
p = [0]*101
p[1] = 1
p[2] = 1
p[3] = 1
p[4] = 2
for _ in range(t):
n = int(input())
if n <= 3:
print(1)
else:
for i in range(5, n+1):
p[i] = p[i-1] + p[i-5]
print(p[n])
if __name__ == "__main__":
main()
ํผํฌ๋จผ์ค ์ธก๋ฉด์์ C++๋ณด๋ค ํ์ด์ฌ์ด ๋ง์ด ์์ฝ๋ค๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
(+ ์ถ๊ฐ๋ก)
ํ์ด์ฌ์ผ๋ก ํ๋ฉด์ ์๊ฒ๋๊ฑด๋ฐ ์ ํ์์ด ์๋ชป๋๋ค๋ ๊ฒ์ ์์๋ค....ใ ใ ใ ใ ;;
์ ํํ ์ ํ์์ f(n) = f(n-1) + f(n-5)๊ฐ ๋ง๋ค.
๋ฌผ๋ก f(n) = f(n-2) + f(n-3) ๋ก ํ์ด๋ ๋์ผํ ๊ฐ์ด ๋์จ๋ค. ํ์ง๋ง ํ์ด์ฌ์ ๊ฒฝ์ฐ "ํ๋ ธ์ต๋๋ค" ๋ก ์ถ๋ ฅ๋๋ค.
์ด์ ๋ฅผ ๋ชจ๋ฅด๊ฒ ๋ค. ์ ๋ ฅ ๊ฐ์ ๋ฒ์์ธ 1 ≤ n ≤ 100 ์ ๊ฐ์ ์ฝ๋๋ก ๊ตฌํํ์ฌ ๋น๊ตํด๋ดค๋๋ฐ ๋ชจ๋ ๊ฐ์ด ๊ฐ์๋ค.
def main():
t = int(input())
p1 = [0]*101
p2 = [0]*101
p1[1] = 1
p1[2] = 1
p1[3] = 1
p1[4] = 2
p2[1] = 1
p2[2] = 1
p2[3] = 1
p2[4] = 2
check = True
for _ in range(t):
n = int(input())
if n <= 3:
print(1)
else:
for i in range(5, n+1):
p1[i] = p1[i-1] + p1[i-5]
p2[i] = p2[i-2] + p2[i-3]
for i in range(n+1):
if p1[i] != p2[i]:
print("๊ฐ์ด ๋ค๋ฅธ ๊ฒ์ด ์ต์ 1๊ฐ ์ด์ ์์ต๋๋ค.")
check = False
break
if check == True:
print("๋ชจ๋ ๊ฐ์ด ๊ฐ์ต๋๋ค.")
if __name__ == "__main__":
main()
p1์ f(n) = f(n-1) + f(n-5)์ ์ ํ์
p2๋ f(n) = f(n-2) + f(n-3)์ ์ ํ์ ์ ์ฌ์ฉํ ๋ฆฌ์คํธ์ด๋ค.
๋ ๊ฐ์ ๋ฆฌ์คํธ์ ์์๋ฅผ ๋น๊ตํ์ฌ ํ ๊ฐ์ ์์๋ผ๋ ๋ค๋ฅผ ๊ฒฝ์ฐ ๋ฉ์ธ์ง๋ฅผ ์ถ๋ ฅํ๊ฒ ๊ตฌ์ถํ์๋ค.
๊ฒฐ๊ณผ๋ ์ญ์ ์์๊ณผ ๊ฐ์๋ค. ๋ชจ๋ ์์๊ฐ ๊ฐ์๋ค.
ํ์ง๋ง ์ด์ ๋ฅผ ๋ชจ๋ฅด๊ฒ ๋ค...
๋ฉ๋ชจ๋ฆฌ๊ฐ ์ด๊ณผ๋ผ์ ๊ทธ๋ฐ๊ฑด๊ฐ?
์ข ๋ ๊ณ ๋ฏผํด๋ด์ผ๊ฒ ๋ค.
'โ๏ธ ์ฝํ ์ค๋น > Dynamic Programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋์ ๊ณํ๋ฒ 1] [C++] 1932๋ฒ. ์ ์ ์ผ๊ฐํ (0) | 2021.01.13 |
---|---|
[๋์ ๊ณํ๋ฒ 1] [C++] 1149๋ฒ. RGB ๊ฑฐ๋ฆฌ (0) | 2021.01.13 |
[๋์ ๊ณํ๋ฒ 1] [Python] 1904๋ฒ. 01ํ์ผ (0) | 2021.01.12 |
[๋์ ๊ณํ๋ฒ 1] [Python] 9184๋ฒ. ์ ๋๋ ํจ์ ์คํ (0) | 2021.01.12 |
[๋์ ๊ณํ๋ฒ 1] [Python] 1003๋ฒ. ํผ๋ณด๋์น ํจ์ (0) | 2021.01.12 |