728x90
300x250
https://www.acmicpc.net/problem/1309
사자를 겹치지 않게 배치하는 것.
사자의 수는 상관없이 모든 경우의 수를 찾는다.
<백준 1309 Java 코드>
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
//System.setIn(new FileInputStream("Test.txt"));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int dp[] = new int[N+1];
int mod = 9901;
dp[1]=3 % mod;
if(N>1)
dp[2]=7 % mod;
for (int i = 3; i <= N; i++) {
dp[i] = ( dp[i-1] //신규로 추가되는 행을 비운다면, 바로 이전의 경우의수가 됨
+ ((dp[i-2]-1)*2) //바로 윗줄이 비어있다면 신규로 추가되는 행에 2가지 경우의 수를 모두 적용 가능
+ (dp[i-1]-dp[i-2]) //바로 윗줄에 배치가 되어있다면 신규로 추가되는 행은 1군데에만 배치 가능(가로/세로 겹칠수있음)
+ 2 ) //신규로 추가되는 행에만 각각 1마리씩 배치하는 경우
% mod;
}
System.out.println(dp[N]);
}
}
728x90
'알고리즘 > DP' 카테고리의 다른 글
백준 11052번: 카드 구매하기 [DP][다이나믹 프로그래밍] -Java (0) | 2024.03.20 |
---|---|
백준 1463번: 1로 만들기 [DP][다이나믹 프로그래밍] - Java 코드 (0) | 2024.03.18 |
백준 11055번: 가장 큰 증가 부분 수열 [DP] - Java (0) | 2020.09.24 |
백준 11053번: 가장 긴 증가하는 부분 수열 [DP][LIS] - Java (0) | 2020.09.22 |
백준 2156번: 포도주 시식 [DP] - Java (0) | 2020.09.21 |