fee-fi-fo-fum
๋ฐ˜์‘ํ˜•

1. ๋ฌธ์ œ

์–ด๋–ค ๋™๋ฌผ์›์— ๊ฐ€๋กœ๋กœ ๋‘์นธ ์„ธ๋กœ๋กœ N์นธ์ธ ์•„๋ž˜์™€ ๊ฐ™์€ ์šฐ๋ฆฌ๊ฐ€ ์žˆ๋‹ค.

์ด ๋™๋ฌผ์›์—๋Š” ์‚ฌ์ž๋“ค์ด ์‚ด๊ณ  ์žˆ๋Š”๋ฐ ์‚ฌ์ž๋“ค์„ ์šฐ๋ฆฌ์— ๊ฐ€๋‘˜ ๋•Œ, ๊ฐ€๋กœ๋กœ๋„ ์„ธ๋กœ๋กœ๋„ ๋ถ™์–ด ์žˆ๊ฒŒ ๋ฐฐ์น˜ํ•  ์ˆ˜๋Š” ์—†๋‹ค. ์ด ๋™๋ฌผ์› ์กฐ๋ จ์‚ฌ๋Š” ์‚ฌ์ž๋“ค์˜ ๋ฐฐ์น˜ ๋ฌธ์ œ ๋•Œ๋ฌธ์— ๊ณจ๋จธ๋ฆฌ๋ฅผ ์•“๊ณ  ์žˆ๋‹ค.

๋™๋ฌผ์› ์กฐ๋ จ์‚ฌ์˜ ๋จธ๋ฆฌ๊ฐ€ ์•„ํ”„์ง€ ์•Š๋„๋ก ์šฐ๋ฆฌ๊ฐ€ 2*N ๋ฐฐ์—ด์— ์‚ฌ์ž๋ฅผ ๋ฐฐ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ๋ช‡ ๊ฐ€์ง€์ธ์ง€๋ฅผ ์•Œ์•„๋‚ด๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•ด ์ฃผ๋„๋ก ํ•˜์ž. ์‚ฌ์ž๋ฅผ ํ•œ ๋งˆ๋ฆฌ๋„ ๋ฐฐ์น˜ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋„ ํ•˜๋‚˜์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋กœ ์นœ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค.

## ์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์šฐ๋ฆฌ์˜ ํฌ๊ธฐ N(1โ‰คNโ‰ค100,000)์ด ์ฃผ์–ด์ง„๋‹ค.

## ์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์‚ฌ์ž๋ฅผ ๋ฐฐ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ 9901๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ์ถœ๋ ฅํ•˜์—ฌ๋ผ.

์‹œ๊ฐ„ ์ œํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ ์ œ์ถœ ์ •๋‹ต ๋งžํžŒ ์‚ฌ๋žŒ ์ •๋‹ต ๋น„์œจ
2 ์ดˆ 128 MB 32587 15957 12653 47.177%

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

2. ํ’€์ด

2.1. ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ๋ฆ„

์ผ๋‹จ ์‚ฌ์ž๊ฐ€ ๋“ค์–ด๊ฐˆ์ˆ˜์žˆ๋Š” ์šฐ๋ฆฌ์˜ ์„ธ๋กœ๊ฐ€ n ์ด๋‹ค. ๊ทธ๋Ÿผ 2xn ๊ฐœ์”ฉ ์šฐ๋ฆฌ๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.

n = 1 ์ผ๊ฒฝ์šฐ

2x1 ์˜ ์นธ์ด ์ƒ์„ฑ๋˜๊ณ  n์˜ ์ˆ˜์— ๋”ฐ๋ผ์„œ

arr[n][0] : ๋‘๊ฐœ์˜ ๋ฐฉ์ค‘์— ์‚ฌ์ž๋ฅผ ์•„์˜ˆ ๋„ฃ์ง€ ์•Š์Œ.
arr[n][1] : ๋‘๊ฐœ์˜ ๋ฐฉ์ค‘ ์™ผ์ชฝ๋ฐฉ์—๋งŒ ์‚ฌ์ž๋ฅผ ๋„ฃ์Œ
arr[n][2] : ๋‘๊ฐœ์˜ ๋ฐฉ์ค‘ ์˜ค๋ฅธ์ชฝ ๋ฐฉ์—๋งŒ ์‚ฌ์ž๋ฅผ ๋„ฃ์Œ

๊ทธ๋ฆฌ๊ณ  ์กฐ๊ฑด์€ ์‚ฌ์ž๋ฅผ ๋„ฃ์€๋ฐฉ์˜ ์˜†๋ฐฉ๊ณผ ์•„๋ž˜๋ฐฉ์—๋Š” ์‚ฌ์ž๋ฅผ ๋„ฃ์„์ˆ˜๊ฐ€ ์—†๋‹ค. ์ฆ‰ ์‚ฌ์ž๋ฅผ ๋„ฃ์ง€ ์•Š์€ ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•˜๊ณ  n๋ฒˆ๋ฐฉ์— ๋„ฃ์€ ๊ณณ์˜ ์œ„์น˜์— ๋”ฐ๋ผ ๋‹ค์Œ ์‚ฌ์ž์˜ ์œ„์น˜๊ฐ€ ์ •ํ•ด์ง„๋‹ค.

<code />
dp[i][0] = dp[i-1][0] + dp[i-1][1] + dp[i-1][2] //์ด์ „๋ฐฉ์— ์‚ฌ์ž๊ฐ€ ์–ด๋””์žˆ๋“  ์ƒ๊ด€X dp[i][1] = dp[i-1][0] + dp[i-1][2] //์ด์ „๋ฐฉ์˜ ์˜ค๋ฅธ์ชฝ, ์—†๋Š”๊ฒฝ์šฐ dp[i][2] = dp[i-1][0] + dp[i-1][1] //์ด์ „๋ฐฉ์˜ ์™ผ์ชฝ, ์—†๋Š”๊ฒฝ์šฐ

์ด๋ ‡๊ฒŒ 3๊ฐ€์ง€ ๊ฒฝ์šฐ๋กœ ๋‚˜๋ˆŒ์ˆ˜์žˆ๋‹ค.

2.2. ์ฝ”๋“œ

<code />
package ๊ธฐ์ดˆ1.Day20.์ •ํ•ด์˜; import java.util.Scanner; public class ๋™๋ฌผ์› { static int ZERO = 0; static int Left = 1; static int Right = 2; static int MOD = 9901; public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); //์šฐ๋ฆฌ์˜ ํฌ๊ธฐ n long[][] dp = new long[n+1][3]; dp[1][ZERO] = 1; dp[1][Left] = 1; dp[1][Right] = 1; for(int i=2; i<=n; i++){ dp[i][ZERO] = (dp[i-1][ZERO] + dp[i-1][Left] + dp[i-1][Right]) % MOD; dp[i][Left] = (dp[i-1][ZERO] + dp[i-1][Right]) % MOD; dp[i][Right] = (dp[i-1][Left] + dp[i-1][ZERO]) % MOD; } System.out.println((dp[n][ZERO] + dp[n][Left] + dp[n][Right]) % MOD); sc.close(); } }

๋‹ค๋ฅธ ๋ฐฉ๋ฒ•(dp๋ฅผ 1์ฐจ์›๋ฐฐ์—ด๋กœ ์„ ์–ธ)

<code />
import java.io.*; import java.util.*; public class Main { public static final int MOD = 9901; public static int N, dp[]; public static StringBuilder sb = new StringBuilder(); public static void main(String[] args) throws IOException { BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); N = Integer.parseInt(bf.readLine()); dp = new int[N+1]; // dp[0] = 1; dp[1] = 3; for(int i=2;i<=N;i++){ dp[i] = ((2 * dp[i-1]) + dp[i-2]) % MOD; } System.out.println(dp[N]); } }

n = 1 -> 1

n = 2 -> 3

n = 3 -> 17

n = 4 -> 41

<code />
//์ ํ™”์‹ dp[n] = (dp[n-1] x 2) + dp[n-2]
๋ฐ˜์‘ํ˜•
profile

fee-fi-fo-fum

@hae02y

ํฌ์ŠคํŒ…์ด ์ข‹์•˜๋‹ค๋ฉด "์ข‹์•„์š”โค๏ธ" ๋˜๋Š” "๊ตฌ๋…๐Ÿ‘๐Ÿป" ํ•ด์ฃผ์„ธ์š”!