반응형
문제
계단 오르기
https://www.acmicpc.net/problem/2579
풀이
설명
계단 오르기 게임에서 얻을 수 있는 총 점수의 최댓값을 구하는 문제입니다.
규칙은 다음과 같습니다.
- 계단은 한 번에 한 계단씩 또는 두 계단씩 오를 수 있습니다. 즉, 한 계단을 밟으면서 이어서 다음 계단이나, 다다음 계단으로 오를 수 있습니다.
- 연속된 세 개의 계단을 모두 밟아서는 안 됩니다. 단, 시작점은 계단에 포함되지 않습니다.
- 마지막 도착 계단은 반드시 밟아야 합니다.
DP를 통해 해결할 수 있습니다.
dp[i]는 i번째 계단까지 밟았을 때 얻을 수 있는 최대 점수입니다.
계단에 써있는 점수를 담은 배열을 stairs라고 할 때,
dp[i]의 값은 다음 두 가지 중 더 큰 값입니다.
- dp[i - 2] + stairs[i]
- dp[i - 3] + stairs[i - 1] + stairs[i]
예시 코드
function solution() {
const n = Number(input());
const stairs = [0].concat(Array.from({ length: n }, () => Number(input())));
const dp = [0, stairs[1], stairs[1] + stairs[2]];
for (let i = 3; i <= n; i++) {
dp[i] = Math.max(
dp[i - 2] + stairs[i],
dp[i - 3] + stairs[i - 1] + stairs[i]
);
}
return dp[n];
}
'Coding Problem > DP' 카테고리의 다른 글
[BOJ 2156] 포도주 시식 (0) | 2025.03.04 |
---|---|
[BOJ 1912] 연속합 (0) | 2025.03.01 |
[BOJ 17404] RGB거리 2 (0) | 2025.02.17 |
[BOJ 1149] RGB거리 (0) | 2025.02.16 |
[BOJ 1446] 지름길 (0) | 2025.02.15 |