# [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
2
3
4
# Output
7
44
274
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]);
});
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19