# [Algorithm/JS] ๋ฐฑ์ค€ 9095๋ฒˆ 1, 2, 3 ๋”ํ•˜๊ธฐ

๐Ÿ”— ๋ฌธ์ œ ๋ฐ”๋กœ๊ฐ€๊ธฐ (opens new window)

# Question

์ •์ˆ˜ 4๋ฅผ 1, 2, 3์˜ ํ•ฉ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐฉ๋ฒ•์€ ์ด 7๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. ํ•ฉ์„ ๋‚˜ํƒ€๋‚ผ ๋•Œ๋Š” ์ˆ˜๋ฅผ 1๊ฐœ ์ด์ƒ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

  • 1+1+1+1
  • 1+1+2
  • 1+2+1
  • 2+1+1
  • 2+2
  • 1+3
  • 3+1

์ •์ˆ˜ n์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, n์„ 1, 2, 3์˜ ํ•ฉ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

# Input

์ฒซ์งธ ์ค„์— ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜ T๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋Š” ํ•œ ์ค„๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ณ , ์ •์ˆ˜ n์ด ์ฃผ์–ด์ง„๋‹ค. n์€ ์–‘์ˆ˜์ด๋ฉฐ 11๋ณด๋‹ค ์ž‘๋‹ค.

# Output

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋งˆ๋‹ค, n์„ 1, 2, 3์˜ ํ•ฉ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

# Example

# Input

3
4
7
10
1
2
3
4

# Output

7
44
274
1
2
3

# Solution

์•Œ๊ณ ๋ฆฌ์ฆ˜: DP

์ •์ˆ˜ n ์ด 1 ์ผ ๋•Œ ์กฐํ•ฉ (1๊ฐœ)

1

์ •์ˆ˜ n ์ด 2์ผ ๋•Œ ์กฐํ•ฉ (2๊ฐœ)

1 + 1 2

์ •์ˆ˜ n์ด 3์ผ ๋•Œ ์กฐํ•ฉ (4๊ฐœ)

1 + 1 + 1
1 + 2
2 + 1
3

๊ทธ๋ ‡๋‹ค๋ฉด ์ •์ˆ˜ n ์ด 4์ผ ๋•Œ๋Š”? (7๊ฐœ)

์ •์ˆ˜ 3์ผ ๋•Œ : 1 + 1 + 1 + 1
์ •์ˆ˜ 3์ผ ๋•Œ : 1 + 1 + 2
์ •์ˆ˜ 3์ผ ๋•Œ : 1 + 2 + 1
์ •์ˆ˜ 2์ผ ๋•Œ : 2 + 1 + 1
์ •์ˆ˜ 2์ผ ๋•Œ : 2 + 2
์ •์ˆ˜ 3์ผ ๋•Œ : 3 + 1
์ •์ˆ˜ 1์ผ ๋•Œ : 1 + 3

์ด๋ฅผ DP ์‹์œผ๋กœ ํ’€์–ด๋‚ด๋ฉด,

  • 3์ผ ๋•Œ ์กฐํ•ฉ์ด 4๊ฐœ โ†’ DP[N-1]
  • 2์ผ ๋•Œ ์กฐํ•ฉ์ด 2๊ฐœ โ†’ DP[N-2]
  • 1์ผ๋•Œ ์กฐํ•ฉ์ด 1๊ฐœ โ†’ DP[N-3]

DP[N] = DP[N-1] + DP[N-2] + DP[N-3] ์œผ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

const fs = require('fs');
const [t, ...input] = fs
  .readFileSync('dev/stdin')
  .toString()
  .trim()
  .split('\n')
  .map(Number);

const dp = new Array(12).fill(0);
dp[1] = 1;
dp[2] = 2;
dp[3] = 4;

input.map((v) => {
  for (let i = 4; i <= v; i++) {
    dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3];
  }
  console.log(dp[v]);
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Last Updated: 2022. 6. 5. ์˜คํ›„ 3:42:39