반응형
https://www.acmicpc.net/problem/1309
1309번: 동물원
첫째 줄에 우리의 크기 N(1≤N≤100,000)이 주어진다.
www.acmicpc.net
dp [N+1][3]에서
dp [n][0] 은 사자가 n행에 한 마리도 없을 때,
dp [n][1] 은 사자가 1행에서 왼쪽에 한 마리 있을 때,
dp [n][2] 은 사자가 1행에서 오른쪽에 한 마리 있을 때를 의미한다.
i=0일 때,
dp [i][0] 일 때는 i-1행에서 사자가 어느 곳에 있어도 되므로, 앞행에 사자가 없거나 왼쪽에 있거나 오른쪽에 있는 경우를 더한다. => dp [i][0]=dp [i-1][0]+dp [i-1][1]+dp [i-1][2];
dp [i][1] 일 때는 i-1행에서 사자가 없거나 오른쪽에만 있어야 하므로 그 경우를 더한다. => dp[i][1]=dp[i-1][2]+dp[i-1][0];
dp [i][2] 일 때는 i-1행에서 사자가 없거나 왼쪽에만 있어야 하므로 그 경우를 더한다. => dp[i][2]=dp[i-1][1]+dp[i-1][0];
import java.io.*;
import java.util.*;
public class Main {
static int N;
static int[][] dp;
static final int num=9901;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine()); // N
dp = new int[N+1][3];
Arrays.fill(dp[1], 1);
for(int i=2;i<=N;i++) {
dp[i][0]=(dp[i-1][0]+dp[i-1][1]+dp[i-1][2])%num;
dp[i][1]=(dp[i-1][2]+dp[i-1][0])%num;
dp[i][2]=(dp[i-1][1]+dp[i-1][0])%num;
}
System.out.println(Arrays.stream(dp[N]).sum()%num);
}// main()
}// class Main
728x90
반응형
'코딩테스트 > 백준' 카테고리의 다른 글
[Java] 백준 2447 : 별 찍기 -10 (0) | 2023.02.22 |
---|---|
[Java] 백준 7576 : 토마토 (0) | 2023.02.21 |
[Java] 백준 1946 : 신입 사원 (0) | 2023.02.20 |
[Java] 백준 1389 : 케빈 베이컨의 6단계 법칙 (0) | 2023.02.20 |
[Java] 백준 11660 : 구간 합 구하기 5 (0) | 2023.02.17 |
댓글