๋ฌธ์
2×n ํฌ๊ธฐ์ ์ง์ฌ๊ฐํ์ 1×2, 2×1 ํ์ผ๋ก ์ฑ์ฐ๋ ๋ฐฉ๋ฒ์ ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์๋ ๊ทธ๋ฆผ์ 2×5 ํฌ๊ธฐ์ ์ง์ฌ๊ฐํ์ ์ฑ์ด ํ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์์ด๋ค.
## ์ ๋ ฅ
์ฒซ์งธ ์ค์ n์ด ์ฃผ์ด์ง๋ค. (1 ≤ n ≤ 1,000)
## ์ถ๋ ฅ
์ฒซ์งธ ์ค์ 2×n ํฌ๊ธฐ์ ์ง์ฌ๊ฐํ์ ์ฑ์ฐ๋ ๋ฐฉ๋ฒ์ ์๋ฅผ 10,007๋ก ๋๋ ๋๋จธ์ง๋ฅผ ์ถ๋ ฅํ๋ค.
ํ์ด
์๊ณ ๋ฆฌ์ฆ ํ๋ฆ
๋ฌธ์ ์ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ทธ๋ ค๋ณด์.
n=4 ๊น์ง ํ์ธํด๋ณด๋ฉด ์ผ์ ํ ํจํด์ด ๋ฐ๋ณต๋๋ค.
์์ ๊ทธ๋ฆผ์ฒ๋ผ ๋
ธ๋๋ธ๋ญ์ n-1
์ ํ์ผ์ ์ธ๋ก ํ์ผ์ด 1๊ฐ ์ถ๊ฐ๋๊ณ ,
๋นจ๊ฐ๋ธ๋ญ์ n-2
์ ํ์ผ์ ๊ฐ๋กํ์ผ์ด 2๊ฐ์ฉ ์ถ๊ฐ๋๋ค.
์ด๋ฅผ dp๋ก ๋ํ๋ด๋ฉด,
dp[n] = dp[n-1] + dp[n-2]
์ ์ ํ์์ ๊ฐ์ง๊ฒ ๋๋ค.
์ฝ๋
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class _2xnํ์ผ๋ง {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int[] dp = new int[1002];
//bottom up ๋ฐฉ์ ์ ์ฉ
dp[1] = 1;
dp[2] = 2;
for(int i=3; i<=n; i++){
// mod ์ฐ์ฐ์ ํ ๊ฒฐ๊ณผ๊ฐ์ ์ถ๋ ฅํ ๋๋ ๋ฐ๋์ ์ฐ์ฐํ ๋๋ง๋ค mod ์ฐ์ฐ์ ํด์ผํ๋ค.
// ๋ง์ง๋ง์๋ง mod์์ Overflow๊ฐ ๋ฐ์ํ ์๋ ์๊ธฐ ๋๋ฌธ.
dp[i] = (dp[i-2] + dp[i-1]) % 10007;
}
System.out.println(dp[n]);
br.close();
}
}
DP๋ฌธ์ ๋ฅผ ์ฒ์ ์ ํ๋ค๋ณด๋ ๋์๊ฒ๋ ์ด๋ ค์ด ๋ฌธ์ ์๋ค. ๋ฌธ์ ๋ฅผ ์ชผ๊ฐ์ ์๊ฐํด์ผํ๋๋ฐ ๋ง์ ๋ง์ฃผ์น๋ฉด ๋จธ๋ฆฌ๊ฐ ํ์์ง๋ค. ๋ ์ฐ์ตํ์.