๋ฌธ์
์ด๋ค ๋๋ฌผ์์ ๊ฐ๋ก๋ก ๋์นธ ์ธ๋ก๋ก N์นธ์ธ ์๋์ ๊ฐ์ ์ฐ๋ฆฌ๊ฐ ์๋ค.
์ด ๋๋ฌผ์์๋ ์ฌ์๋ค์ด ์ด๊ณ ์๋๋ฐ ์ฌ์๋ค์ ์ฐ๋ฆฌ์ ๊ฐ๋ ๋, ๊ฐ๋ก๋ก๋ ์ธ๋ก๋ก๋ ๋ถ์ด ์๊ฒ ๋ฐฐ์นํ ์๋ ์๋ค. ์ด ๋๋ฌผ์ ์กฐ๋ จ์ฌ๋ ์ฌ์๋ค์ ๋ฐฐ์น ๋ฌธ์ ๋๋ฌธ์ ๊ณจ๋จธ๋ฆฌ๋ฅผ ์๊ณ ์๋ค.
๋๋ฌผ์ ์กฐ๋ จ์ฌ์ ๋จธ๋ฆฌ๊ฐ ์ํ์ง ์๋๋ก ์ฐ๋ฆฌ๊ฐ 2*N ๋ฐฐ์ด์ ์ฌ์๋ฅผ ๋ฐฐ์นํ๋ ๊ฒฝ์ฐ์ ์๊ฐ ๋ช ๊ฐ์ง์ธ์ง๋ฅผ ์์๋ด๋ ํ๋ก๊ทธ๋จ์ ์์ฑํด ์ฃผ๋๋ก ํ์. ์ฌ์๋ฅผ ํ ๋ง๋ฆฌ๋ ๋ฐฐ์นํ์ง ์๋ ๊ฒฝ์ฐ๋ ํ๋์ ๊ฒฝ์ฐ์ ์๋ก ์น๋ค๊ณ ๊ฐ์ ํ๋ค.
## ์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ฐ๋ฆฌ์ ํฌ๊ธฐ N(1โคNโค100,000)์ด ์ฃผ์ด์ง๋ค.
## ์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์ฌ์๋ฅผ ๋ฐฐ์นํ๋ ๊ฒฝ์ฐ์ ์๋ฅผ 9901๋ก ๋๋ ๋๋จธ์ง๋ฅผ ์ถ๋ ฅํ์ฌ๋ผ.
์๊ฐ ์ ํ | ๋ฉ๋ชจ๋ฆฌ ์ ํ | ์ ์ถ | ์ ๋ต | ๋งํ ์ฌ๋ | ์ ๋ต ๋น์จ |
---|---|---|---|---|---|
2 ์ด | 128 MB | 32587 | 15957 | 12653 | 47.177% |
https://www.acmicpc.net/problem/1309
ํ์ด
์๊ณ ๋ฆฌ์ฆ ํ๋ฆ
์ผ๋จ ์ฌ์๊ฐ ๋ค์ด๊ฐ์์๋ ์ฐ๋ฆฌ์ ์ธ๋ก๊ฐ n ์ด๋ค. ๊ทธ๋ผ 2xn ๊ฐ์ฉ ์ฐ๋ฆฌ๊ฐ ์์ฑ๋๋ค.
n = 1 ์ผ๊ฒฝ์ฐ
2x1 ์ ์นธ์ด ์์ฑ๋๊ณ n์ ์์ ๋ฐ๋ผ์
arr[n][0]
: ๋๊ฐ์ ๋ฐฉ์ค์ ์ฌ์๋ฅผ ์์ ๋ฃ์ง ์์.arr[n][1]
: ๋๊ฐ์ ๋ฐฉ์ค ์ผ์ชฝ๋ฐฉ์๋ง ์ฌ์๋ฅผ ๋ฃ์arr[n][2]
: ๋๊ฐ์ ๋ฐฉ์ค ์ค๋ฅธ์ชฝ ๋ฐฉ์๋ง ์ฌ์๋ฅผ ๋ฃ์
๊ทธ๋ฆฌ๊ณ ์กฐ๊ฑด์ ์ฌ์๋ฅผ ๋ฃ์๋ฐฉ์ ์๋ฐฉ๊ณผ ์๋๋ฐฉ์๋ ์ฌ์๋ฅผ ๋ฃ์์๊ฐ ์๋ค. ์ฆ ์ฌ์๋ฅผ ๋ฃ์ง ์์ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ n๋ฒ๋ฐฉ์ ๋ฃ์ ๊ณณ์ ์์น์ ๋ฐ๋ผ ๋ค์ ์ฌ์์ ์์น๊ฐ ์ ํด์ง๋ค.
dp[i][0] = dp[i-1][0] + dp[i-1][1] + dp[i-1][2] //์ด์ ๋ฐฉ์ ์ฌ์๊ฐ ์ด๋์๋ ์๊ดX
dp[i][1] = dp[i-1][0] + dp[i-1][2] //์ด์ ๋ฐฉ์ ์ค๋ฅธ์ชฝ, ์๋๊ฒฝ์ฐ
dp[i][2] = dp[i-1][0] + dp[i-1][1] //์ด์ ๋ฐฉ์ ์ผ์ชฝ, ์๋๊ฒฝ์ฐ
์ด๋ ๊ฒ 3๊ฐ์ง ๊ฒฝ์ฐ๋ก ๋๋์์๋ค.
์ฝ๋
package ๊ธฐ์ด1.Day20.์ ํด์;
import java.util.Scanner;
public class ๋๋ฌผ์ {
static int ZERO = 0;
static int Left = 1;
static int Right = 2;
static int MOD = 9901;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(); //์ฐ๋ฆฌ์ ํฌ๊ธฐ n
long[][] dp = new long[n+1][3];
dp[1][ZERO] = 1;
dp[1][Left] = 1;
dp[1][Right] = 1;
for(int i=2; i<=n; i++){
dp[i][ZERO] = (dp[i-1][ZERO] + dp[i-1][Left] + dp[i-1][Right]) % MOD;
dp[i][Left] = (dp[i-1][ZERO] + dp[i-1][Right]) % MOD;
dp[i][Right] = (dp[i-1][Left] + dp[i-1][ZERO]) % MOD;
}
System.out.println((dp[n][ZERO] + dp[n][Left] + dp[n][Right]) % MOD);
sc.close();
}
}
๋ค๋ฅธ ๋ฐฉ๋ฒ(dp๋ฅผ 1์ฐจ์๋ฐฐ์ด๋ก ์ ์ธ)
import java.io.*;
import java.util.*;
public class Main {
public static final int MOD = 9901;
public static int N, dp[];
public static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(bf.readLine());
dp = new int[N+1]; //
dp[0] = 1;
dp[1] = 3;
for(int i=2;i<=N;i++){
dp[i] = ((2 * dp[i-1]) + dp[i-2]) % MOD;
}
System.out.println(dp[N]);
}
}
n = 1
-> 1
n = 2
-> 3
n = 3
-> 17
n = 4
-> 41
//์ ํ์
dp[n] = (dp[n-1] x 2) + dp[n-2]