백준 1309번: 동물원 [DP][다이나믹 프로그래밍] -Java :: 매운코딩
728x90
300x250

 

https://www.acmicpc.net/problem/1309

 

1309번: 동물원

첫째 줄에 우리의 크기 N(1≤N≤100,000)이 주어진다.

www.acmicpc.net

사자를 겹치지 않게 배치하는 것.

사자의 수는 상관없이 모든 경우의 수를 찾는다.

 

<백준 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

+ Recent posts