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

 

๐Ÿฅ• ์•„์ด๋””์–ด

 

DP ๋ฌธ์ œ์— ์•ฝํ•œ ์ €๋Š” N์ด 1์ผ ๋•Œ ๋ถ€ํ„ฐ 6์ผ ๋•Œ ๊นŒ์ง€ ์†์ˆ˜ ๊ทธ๋ ค๋ณด๋ฉฐ ๊ทœ์น™์„ ์ฐพ๊ณ ์ž ๋…ธ๋ ฅํ–ˆ์Šต๋‹ˆ๋‹ค.

 

N์ด 5์ผ ๋•Œ 2 + 3 ํƒ€์ผ๋กœ ๋‚˜๋ˆ„์–ด ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ค‘๊ฐ„์— ๊ฒน์น˜๋Š” ๋ถ€๋ถ„์— ๋“ค์–ด๊ฐˆ 2*1 ํƒ€์ผ๊ณผ 2*2ํƒ€์ผ์„ ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡๊ฒŒ ๋‚˜์˜จ ์ ํ™”์‹์€ D[i] = 3 * D[i - 2] + 2 * D[i - 3] ์ž…๋‹ˆ๋‹ค.

 

๋‹ค๋ฅธ ๋ถ„๋“ค์˜ ํ’€์ด๋ฅผ ๋ณด๋‹ˆ 1 + 4 ํƒ€์ผ๋กœ ๋‚˜๋ˆ„์–ด ์ƒ๊ฐํ–ˆ๋˜๋ฐ, ์ ํ™”์‹์€ ๋‹ค๋ฅด๊ฒŒ ๋‚˜์˜ค๋”๋ผ๋„ ๊ฒฐ๊ตญ ๊ฐ™์€ ์ ‘๊ทผ๋ฒ•์ž…๋‹ˆ๋‹ค.

 

 

์ œ์ถœ ์ฝ”๋“œ

public class Main {

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int[] D = new int[1001];

		D[1] = 1;
		D[2] = 3;
		D[3] = 5;
		for (int i = 4; i <= n; i++) {
			D[i] = (3 * D[i - 2] + 2 * D[i - 3]) % 10007;
		}
		System.out.println(D[n]);
	}
}

 

ํšจ์œจ์„ฑ

squareyun