시간 & 메모리 제한
문제
입력 & 출력
DP를 이용한 문제풀이
package com.Back;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Back_1309 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int[][] dp = new int[N + 1][3];
dp[1][0] = 1;
dp[1][1] = 1;
dp[1][2] = 1;
for (int i = 2; i <= N; i++) {
dp[i][0] = (dp[i - 1][0] + dp[i - 1][1] + dp[i - 1][2])%9901;
dp[i][1] = (dp[i - 1][0] + dp[i - 1][2])%9901;
dp[i][2] = (dp[i - 1][0] + dp[i - 1][1])%9901;
}
System.out.println((dp[N][0]+dp[N][1]+dp[N][2])%9901);
}
}
- 이 문제는 DP를 이용해서 문제를 해결했습니다.
- 배치를 할 수 있냐 없냐를 가지고 DP에 대한 점화식을 짜주면 됩니다.
- dp[k][0]은 한 라인에 아무 사자도 두지 않는 경우입니다.
- dp[k][1]은 한 라인에 오른쪽에 두는 경우입니다.
- dp[k][2]은 한 라인에 왼쪽에 두는 경우입니다.
- 맨 처음에는 모두 다 가능 하니까 1로 설정을 해줍니다.
- 그 후에 for문을 돌리는데 윗 칸에 사자가 없는 경우는 3가지 모두 가능합니다.
- 윗칸이 오른쪽에만 있는 경우는 왼쪽에 배치하는 선택을 , 왼쪽에만 있는 경우는 오른쪽에 배치하는 선택을 해주면 됩니다.
'Algorithm > 백준 알고리즘' 카테고리의 다른 글
백준_1495 기타리스트(자바) / DP (0) | 2021.05.15 |
---|---|
백준_2210 숫자판 점프(자바) / DFS + 백 트래킹 (0) | 2021.05.14 |
백준_5567 결혼식(자바) / 구현 (0) | 2021.05.12 |
백준_1965 상자넣기(자바) / 최장 증가 수열(LIS) (0) | 2021.05.11 |
백준_9465 스티커(자바) / DP (0) | 2021.05.10 |