๋ฐ์ํ
https://www.acmicpc.net/problem/1003
โ๏ธ ๋ฌธ์
๐ ๋ฌธ์ ํด๊ฒฐ
1. ํ ์ด๋ธ ์ ์
dp[i][j]
์ i
๊ฐ์ i ๋ฒ์งธ ํผ๋ณด๋์น ์๋ฅผ ์๋ฏธํ๊ณ , j(=0, 1)
๋ ํด๋น ํผ๋ณด๋์น์์ 0์ ์ถ๋ ฅ ํ์์ 1์ ์ถ๋ ฅ ํ์๋ฅผ ๋ํ๋
๋๋ค.
dp[i][0] = i ๋ฒ์งธ ํผ๋ณด๋์น ์์ 0 ์ถ๋ ฅ ํ์
dp[i][1] = i ๋ฒ์งธ ํผ๋ณด๋์น ์์ 1 ์ถ๋ ฅ ํ์
2. ์ ํ์ ์ธ์ฐ๊ธฐ
3 ๋ฒ์งธ ํผ๋ณด๋์น ์์ ๋ํด์ ์๊ฐํด๋ณด๊ฒ ์ต๋๋ค.
fibonacci(3)
์ fibonacci(2) + fibonacci(1)
์
๋๋ค.
fibonacci(2)
๋ fibonacci(0) + fibonacci(1)
์
๋๋ค.
fibonacci(0)
์ 0์ ์ถ๋ ฅํ๊ณ fibonacci(1)
์ 1์ ์ถ๋ ฅํฉ๋๋ค.
๊ทธ๋ ๋ค๋ฉด fibonacci(3)
์ ๋ํด์ dp[3][j]
๋ฅผ ์ฌ์ ์ํ๋ค๋ฉด, ์๋์ ๊ฐ์ต๋๋ค.
dp[3][0] = dp[2][0] + dp[1][0];
dp[3][1] = dp[2][1] + dp[1][1];
์ ํ์์ผ๋ก ๋ํ๋ธ๋ค๋ฉด, ์๋์ ๊ฐ์ด ๋ํ๋ผ ์ ์์ต๋๋ค.
// ๋จ, i >= 2
dp[i][0] = dp[i-2][0] + dp[i-1][0];
dp[i][1] = dp[i-2][1] + dp[i-2][1];
3. ์ด๊ธฐ๊ฐ ์ค์
fibonacci(0)
์ 0์ ๋ฆฌํดํ๋ฏ๋ก, ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
dp[0][0] = 1;
dp[0][1] = 0;
fibonacci(1)
์ 1์ ๋ฆฌํดํ๋ฏ๋ก, ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
dp[1][0] = 0;
dp[1][1] = 1;
๐ ์ ์ฒด ์ฝ๋
import java.io.*;
public class Main {
public static void main(String args[]) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(bf.readLine());
int[][] dp = new int[41][2];
// ์ด๊ธฐ๊ฐ ์ค์
dp[0][0] = 1; dp[0][1] = 0;
dp[1][0] = 0; dp[1][1] = 1;
// fibonacci(3) = fibonacci(2) + fibonacci(1)์ ๊ณต์์ ์ด์ฉํ์ฌ ์ ํ์ ์์ฑ
for(int i=2; i<=40; i++) {
dp[i][0] = dp[i-1][0] + dp[i-2][0];
dp[i][1] = dp[i-1][1] + dp[i-2][1];
}
for(int i=0; i<N; i++) {
int idx = Integer.parseInt(bf.readLine());
bw.write(dp[idx][0] + " " + dp[idx][1] + "\n");
}
bw.flush();
bw.close();
}
}
๋ฐ์ํ