๋ฐฑ์ค 9095 ๋ solved.ac ๊ธฐ์ค Tier : silver 3
DP ๋ฌธ์ ์ ํต์ฌ์ ํฐ ๋ฌธ์ ๋ฅผ ์์ ๋ฌธ์ ๋ก ๋๋๊ธฐ ์ด๋ฉฐ, ํด๋น ๋ฌธ์ ์๋ ์ ์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ํ์ด์ผ ํ๋ค.
ํฐ ๋ฌธ์ ๋ฅผ ์์ ๋ฌธ์ ๋ก ๋๋๊ธฐ ์ํด์๋ ๋ฌธ์ ์ ๋ณด์ด๋ ์ผ์ ํ ๊ท์น์ ์ฐพ์ ์ ํ์์ผ๋ก ๋์ถํ๋ ๊ณผ์ ์ด ํ์์ ์ด๋ค.
๋ฌธ์
์ ์ถ๋ ฅ
๋ฌธ์ ํด๊ฒฐ ๊ณผ์
๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ 1์ ๋ํ๊ธฐ ๊ฒฝ์ฐ์ ์์ 2์ ๋ํ๊ธฐ ๊ฒฝ์ฐ์ ์, 3์ ๋ํ๊ธฐ ๊ฒฝ์ฐ์ ์๋ฅผ ๋๋ ์ ์๊ฐํ๋ค.
์์ธํ ๋ฌธ์ ๋ฅผ ๋ณธ๋ค๋ฉด x + x + x + x + x = n
์ผ ๊ฒฝ์ฐ
-
n์ด 1๋ก ์ด๋ฃจ์ด์ง ๊ฒฝ์ฐ
x + x + x + x + 1 = n
x ๋ n - 1
-
n์ด 2๋ก ์ด๋ฃจ์ด์ง ๊ฒฝ์ฐ
x + x + x + x + 2 = n
x ๋ n - 2
-
n์ด 3์ผ๋ก ์ด๋ฃจ์ด์ง ๊ฒฝ์ฐ
x + x + x + x + 3 = n
x ๋ n - 3
์ผ๋ก ๋๋ ์ ์๋ค. ๊ทธ๋ ๋ค๋ฉด d[n]
์ ๊ตฌํ๋ ค๋ฉด d[n-1] ์ ๊ฒฝ์ฐ์ ์ + d[n-2] ์ ๊ฒฝ์ฐ์ ์ + d[n-3] ์ ๊ฒฝ์ฐ์ ์๋ฅผ ํฉํ ๊ฒ์ด ๋ ๊ฒ์ด๋ค.
์ ํ์
์์ ๋ด์ฉ์ ์ ํ์์ผ๋ก ๋ํ๋ด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค
d[n] = d[n-1] + d[n-2] + d[n-3]
์ด๋ผ๋ ์ ํ์์ด ๋์ค๊ฒ ๋๋ค.
์์ค ์ฝ๋(์๋ฐ)
์์ค์ฝ๋๋ฅผ Top-Down, Bottom-Up ์ผ๋ก ๋๋์ด์ ์์ฑํด๋ณด์๋ค.
Top Down
import java.io.*;
public class Main {
static int[] memo = new int[12];
public static void main(String[] args) throws IOException {
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter output = new BufferedWriter(new OutputStreamWriter(System.out));
int t = Integer.parseInt(input.readLine());
while(t-- > 0){
int n = Integer.parseInt(input.readLine());
output.write(dp(n) + "\n");
}
output.flush();
output.close();
}
private static int dp(int n){
if(memo[n] > 0) return memo[n];
if(n == 1) return 1;
else if(n == 2) return 2;
else if(n == 3) return 4;
else {
memo[n] = dp(n-1) + dp(n-2) + dp(n-3);
return memo[n];
}
}
}
Botton-Up
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int t = Integer.parseInt(br.readLine());
int[] arr;
while(t-- > 0){
int n = Integer.parseInt(br.readLine());
arr = new int[12];
arr[0] = 1;
arr[1] = 2;
arr[2] = 4;
for (int i = 3; i < arr.length; i++) {
arr[i] = arr[i-3] + arr[i-2] + arr[i-1];
}
bw.write(arr[n-1] + "\n");
}
bw.flush();
bw.close();
}
}
๋๊ธ