๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿง‘‍๐Ÿ’ป ์ฝ”๋”ฉ/Algorithm

๋ฐฑ์ค€ 15990 - 1, 2, 3 ๋”ํ•˜๊ธฐ 5 (c++)

728x90

๋ฌธ์ œ ์ถœ์ฒ˜ : https://www.acmicpc.net/problem/9095

 

<์ ‘๊ทผ ๋ฐฉ๋ฒ•>

Dp ์ด์šฉ

๋งˆ์ง€๋ง‰ ์ˆ˜๊ฐ€ 1, 2, 3์ธ ๊ฒฝ์šฐ๋ฅผ ๋‚˜๋ˆ„์–ด์„œ ์ €์žฅ

๋งˆ์ง€๋ง‰ ์ˆ˜๊ฐ€ 1์ด๋ฉด ์•ž์— 2๋‚˜ 3์ด ์™€์•ผ ํ•˜๊ณ  2๋ฉด 1์ด๋‚˜ 3, 3์ด๋ฉด 1, 2๊ฐ€ ์™€์•ผ ํ•จ

์—ฌ๊ธฐ๊นŒ์ง€๋Š” ์ƒ๊ฐ ํ•ด๋‚ด๋Š”๋ฐ ์„ฑ๊ณตํ–ˆ์ง€๋งŒ, ๋„์ €ํžˆ ์ ํ™”์‹์„ ๋ชป ๊ตฌํ•˜๊ฒ ์–ด์„œ ๋‹ค๋ฅธ ๋ถ„๋“ค์˜ ํ’€์ด๋ฅผ ์ฐธ๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

<ํ’€์ด>

  Dp[n][1] dp[n][2] dp[n][3]
n=1 1 0 0
n=2 0 1 0
n=3 1 1 1
n=4 2 0 1
n=5 1 2 1
n=6 3 3 2
n=7 5 2 2
n=8 4 5 3

์ˆซ์ž๊ฐ€ ์ž‘์œผ๋ฉด ์ฐพ๊ธฐ ํž˜๋“œ๋‹ˆ n=8์ผ ๋•Œ๋ฅผ ํ™•์ธํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

dp[8][1]์€ ๋ฐ”๋กœ ์œ„์ธ dp[7][2] + dp[7][3]์—์„œ ๊ฐ€์ ธ์˜ค๋ฉด ๋˜๊ณ 

dp[8][2]๋Š” ๊ทธ ์œ„์ธ dp[6][1] + dp[6][3],

dp[8][3]์€ ๋˜ ๊ทธ ์œ„์ธ dp[5][2] + dp[5][3]์—์„œ ๊ฐ€์ ธ์˜ค๋ฉด ๋ฉ๋‹ˆ๋‹ค. 

 

<์ ํ™”์‹>

dp[n][1] = dp[n-1][2] + dp[n-1][3]

dp[n][2] = dp[n-2][1] + dp[n-2][3]

dp[n][3] = dp[n-3][1] + dp[n-3][2]

 

<์†Œ์Šค ์ฝ”๋“œ>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
#define MAX 100001
#define VAL 1000000009
 
using namespace std;
 
int main() {
  int T, n;
  long long dp[MAX][4]={0};
 
  dp[1][1] = 1;
  dp[2][2] = 1;
  dp[3][1] = 1;
  dp[3][2] = 1;
  dp[3][3] = 1;
 
  for(int i=4; i<MAX; i++){
    dp[i][1] = (dp[i-1][2]+dp[i-1][3])%VAL;
    dp[i][2] = (dp[i-2][1]+dp[i-2][3])%VAL;
    dp[i][3] = (dp[i-3][1]+dp[i-3][2])%VAL;
  }
  
  cin >> T;
  while(T--){
    cin >> n;
    cout << (dp[n][1]+dp[n][2]+dp[n][3])%VAL << "\n";
  }
}
cs

 

<ํ›„๊ธฐ>

'๋งˆ์ง€๋ง‰ ์ˆ˜๊ฐ€ 1์ด๋ฉด ์•ž์— 2๋‚˜ 3์ด ์™€์•ผ ํ•œ๋‹ค.' ๊นŒ์ง€๋Š” ์ž˜ ์ ‘๊ทผํ–ˆ๋Š”๋ฐ n-1๋งŒ ์ด์šฉํ•ด์„œ ๊ฐ’์„ ์ฐพ์œผ๋ ค ํ•˜๋‹ค๊ฐ€ ์‹œ๊ฐ„์„ ๋งŽ์ด ๋‚ ๋ ธ๋„ค์š”... ์ด ํ’€์ด ๋ฐฉ์‹์— ์ ‘๊ทผํ•˜๊ธฐ๊นŒ์ง€ ์ด๋ฏธ ๋งŽ์€ ์‹œ๊ฐ„์„ ํˆฌ์žํ–ˆ๊ธฐ์— ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์˜ ํ’€์ด๋ฅผ ๋ดค๋Š”๋ฐ ํ•˜๋ฃจ ์ •๋„๋งŒ ๋” ๊ณ ๋ฏผํ•ด ๋ณผ ๊ฑธ ์‹ถ๊ธฐ๋„ ํ•˜๊ณ  ์กฐ๊ธˆ ์•„์‰ฝ๋„ค์š”.

๋งŽ์€ ์‚ฌ๋žŒ์ด ๊ทธ๋ ‡๋“ฏ ์ €๋„ dp๋ฌธ์ œ๋ฅผ ์–ด๋ ค์›Œํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ตœ๊ทผ dp๋ฌธ์ œ๋ฅผ ์ข€ ๋งŽ์ด ํ’€์–ด๋ณด๊ณ  ์žˆ๋Š”๋ฐ ๊ทธ๋ž˜๋„ ๊ฑฐ์˜ ์ •๋‹ต๊นŒ์ง€ ๊ทผ์ ‘ํ–ˆ๋‹ค๋Š” ๊ฒƒ์— ๋งŒ์กฑํ•˜๋ฉฐ ๋ณต์Šต ๊ฒธ ์ฝ”๋“œ์™€ ํ’€์ด๋ฅผ ์ •๋ฆฌํ•ด์„œ ์˜ฌ๋ฆฝ๋‹ˆ๋‹ค.

728x90