https://programmers.co.kr/learn/courses/30/lessons/12914
์ฝ๋
class Solution {
public long solution(int n) {
int[] dp = new int[2001];
dp[1] = 1;
dp[2] = 2;
for(int i=3; i<2001; i++){
dp[i] = (dp[i-2] + dp[i-1]) % 1234567;
}
return dp[n];
}
}
ํ์ด
Level3์ ์กด์ฌํ๋ ๋ฌธ์ ์ง๋ง, ๊ฐ๋จํ DP๋ฌธ์ ๋ค.
์๊ณ ๋ฆฌ์ฆ ๋ถ๋ฅ๋ฅผ ๋ณด์ง ์์์ง๋ง ๋ฌธ์ ๋ฅผ ๋ณด๋ DP๋ก ์ ๊ทผํด์ผ ํ ๊ฒ ๊ฐ์์ ๊ท์น์ ๋ณด์๋ค.
์นธ์ด ์ด 4๊ฐ์์ ๋, ๋ฐฉ๋ฒ์ 5๊ฐ์ง๋ค
1 + 1 + 1 + 1
1 + 2 + 1
2 + 1 + 1
1 + 1 + 2
2 + 2
์นธ์ด ์ด 3๊ฐ์์ ๋, ๋ฐฉ๋ฒ์ 3๊ฐ์ง๋ค.
1 + 1 + 1
1 + 2
2 + 1
์นธ์ด ์ด 2๊ฐ์์ ๋, ๋ฐฉ๋ฒ์ 2๊ฐ์ง๋ค.
1 + 1
2
n = 4์ผ๋๋ฅผ ๋ค์ ๋ณด์.
๋ง์ง๋ง์ 1์นธ์ ๋ธ ๊ฒฝ์ฐ(๋นจ๊ฐ์ ์ซ์) ๊ทธ ์์นธ(n = 3)์ ๋ฐฉ๋ฒ์์ +1๋ง ํ๋ฉด ๋๋ค. ๋ฐ๋ผ์ dp[i-1]
๋ง์ง๋ง์ 2์นธ์ ๋ธ ๊ฒฝ์ฐ(๋ณด๋ผ์ ์ซ์) ๊ทธ ์์์นธ(n = 2)์ ๋ฐฉ๋ฒ์์ +2๋ง ํ๋ฉด ๋๋ค. ๋ฐ๋ผ์ dp[i-2]
x + ... + x + 1
x + ... + x + 2
๋ง์ง๋ง์ 1์นธ์ ๋ฐ์ด ๋์ฐฉํ๋ ๊ฒฝ์ฐ, ๊ทธ ์์นธ์ ๋ฐ๊ณ 1์นธ์ ๋ด ๊ฒฝ์ฐ์ด๋ฏ๋ก, dp[i-1] ์ด๋ค.
๋ง์ง๋ง์ 2์นธ์ ๋ฐ์ด ๋์ฐฉํ๋ ๊ฒฝ์ฐ, ๊ทธ ์์์นธ์ ๋ฐ๊ณ 2์นธ์ ๋ด ๊ฒฝ์ฐ์ด๋ฏ๋ก, dp[i-2]์ด๋ค.
๋ฐ๋ผ์ ์ ํ์์ ๋ค์๊ณผ ๊ฐ๋ค.
dp[i] = dp[i-2] + dp[i-1]
n์ ๋ฒ์๊ฐ 2000๊น์ง์ด๋ฏ๋ก, n์ด ์ผ์ ์ ์ด์์์ int๋ฒ์๋ฅผ ๋ฒ์ด๋๋ฏ๋ก,
dp[i]๊ฐ์ ์ ์ฅํ ๋ 1234567์ ๋๋ ๋๋จธ์ง๋ก ์ ์ฅํ๋ค.(๋ฌธ์ ์์ ์ฃผ์ด์ง)
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 1051๋ฒ: ์ซ์ ์ ์ฌ๊ฐํ(์์ ํ์, ๊ตฌํ) (0) | 2020.03.03 |
---|---|
[๋ฐฑ์ค] 4948๋ฒ: ๋ฒ ๋ฅดํธ๋ ๊ณต์ค(์์, ์๋ผํ ์คํ ๋ค์ค์ ์ฒด) (0) | 2020.03.03 |
ํ๋ก๊ทธ๋๋จธ์ค[Java] - ์ผ๊ทผ ์ง์ (0) | 2020.03.03 |
ํ๋ก๊ทธ๋๋จธ์ค[Java] - ๋จ์์นด๋ฉ๋ผ(Greedy) (0) | 2020.03.02 |
ํ๋ก๊ทธ๋๋จธ์ค[Java] - ์ง์ง์ด ์ ๊ฑฐํ๊ธฐ (0) | 2020.03.02 |
๋๊ธ