โถ ๋ฌธ์ : http://acmicpc.net/problem/2579
โถ ์ฝ๋ :
let input = require('fs').readFileSync(`BaekJoon/testcase.txt`).toString().split('\n');
const [N, ...temp] = input;
const stairs = temp.map(n => Number(n));
const dp = Array(N).fill(0);
dp[0] = stairs[0];
dp[1] = Math.max(stairs[0] + stairs[1], stairs[1]);
dp[2] = Math.max(stairs[0] + stairs[2], stairs[1] + stairs[2]);
for(let i = 3; i < N; i++){
dp[i] = Math.max(stairs[i] + stairs[i-1] + dp[i-3], stairs[i] + dp[i-2]);
}
console.log(dp[N-1])
โถ ๋ฌธ์ ํ์ด:
1. ๋์ ํ๋ก๊ทธ๋๋ฐ(DP)์ ์ฌ์ฉํ๋ ๋ฌธ์ ์ด๋ค.
2. ์ด๊ธฐ input์ผ๋ก ๋ค์ด์จ ์ ์๋ฅผ stairs๋ฐฐ์ด์ ์ ์ฅํ๋ค. ๊ฐ ์ธต์์์ ์ต๋๊ฐ์ dp ๋ฐฐ์ด์ ์ ์ฅํ๋ค.
3. ์ฐ์๋ 3์นธ์ ์ค๋ฅผ ์ ์๊ณ , ๋ง์ง๋ง ๊ณ๋จ์ ๋ฐ์์ผํ๋ค. ๋ํ ์ฒซ ์์์ด 0๋ฒ์งธ ์นธ์ด ์๋์๋ ์๊ธฐ์ 0, 1, 2 ๋ฒ์งธ ๊ณ๋จ์ ์ด๊ธฐ๊ฐ์ ๊ณ์ฐํด์ ๋ฃ์ด์ค๋ค. => Math.max() ์ฌ์ฉ
- 0๋ฒ์งธ : stairs[0]์ ๊ฐ์ ๊ทธ๋๋ก ๊ฐ์ง๋ค.
- 1๋ฒ์งธ : stairs[1] ์ ๊ฐ๊ณผ stairs[0] + stairs[1] ๊ฐ, ์ฆ ๋ฐ๋ก 1๋ฒ์งธ ์นธ์ผ๋ก ๊ฐ๋ ๊ฒฝ์ฐ์ 0๋ฒ์งธ ์นธ์ ๋ฐ๊ณ 1๋ฒ์งธ ์นธ์ ์ค๋ฅด๋ ๊ฒฝ์ฐ ์ค ํฐ ๊ฐ์ ์ ์ฅํ๋ค.
- 2๋ฒ์งธ : ์ฐ์๋ 3์นธ์ ์ค๋ฅผ ์ ์๊ธฐ์, stairs[0] + stairs[2] ์ stairs[1] + stairs[2] ์ ๊ฐ ์ค ๋ ํฐ ๊ฐ์ ์ ์ฅํ๋ค.
4. ์ดํ 3๋ฒ์งธ ์นธ๋ถํฐ๋ ํ์ฌ ์นธ์ ์ ์์ ์ด์ ์นธ์ ์ ์ ๊ทธ๋ฆฌ๊ณ ์ด์ ์นธ์ผ๋ก๋ถํฐ ํ์นธ ๊ฑด๋๋ด i-3 ๋ฒ์งธ์ dp ๊ฐ์ ํฉ์น ๊ฐ๊ณผ ํ์ฌ ์นธ์ ์ ์์ ์ ์ ์นธ๊น์ง(i-2)์ dp์ ์ ์ฅ๋ ๊ฐ์ ํฉ์น ๊ฐ์ ๋น๊ตํ๋ค.
- ์ด๋ ๊ฒ ๋๋ฉด ์ฐ์๋ 3์นธ์ ์ค๋ฅด๋ ๊ฒฝ์ฐ๋ฅผ ๋ฐฐ์ ํ ์ ์๊ธฐ๋๋ฌธ.
5. ๊ฒฐ๊ณผ์ ์ผ๋ก stairs๋ ๊ฐ ์นธ์์์ ์ ์๋ฅผ ๋ํ๋ด๋ ๋ฐฐ์ด์ธ ๊ฒ์ด๊ณ , dp์ ์ ์ฅ๋ ๊ฐ์ ์ฐ์๋ 3์นธ์ ์ค๋ฅด์ง ์์ผ๋ฉด์ ๊ณ๋จ์ ์ฌ๋์๋์ ์ต๋๊ฐ์ ์ ์ฅํ ๋ฐฐ์ด์ด๋ผ๊ณ ์๊ฐํ ์ ์๋ค.
6. ์ฐ์ฐ ํ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ฉด ๋์
'๐ฏ CodingTest > BaekJoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BaekJoon] 11724๋ฒ ์ฐ๊ฒฐ ์์์ ๊ฐ์ (0) | 2022.06.03 |
---|---|
[BaekJoon] 2606๋ฒ ๋ฐ์ด๋ฌ์ค (0) | 2022.06.02 |
[Baekjoon] 1764 ๋ฃ๋ณด์ก (0) | 2022.05.27 |
[Baekjoon] 1676 ํฉํ ๋ฆฌ์ผ 0์ ๊ฐ์ (0) | 2022.05.27 |
[Baekjoon] 1389๋ฒ ์ผ๋น ๋ฒ ์ด์ปจ์ 6๋จ๊ณ ๋ฒ์น (0) | 2022.05.27 |