Algorithm/Problem Solving
[BOJ/2579] 계단 오르기
DevMoomin
2020. 4. 20. 21:25
(공감과 댓글 하나는 글쓴이에게 큰 힘이 됩니다.)
문제 링크
- https://www.acmicpc.net/problem/2579
사용 알고리즘
- DP
풀이
- d[i] = i번째 계단에 올라갔을 때의 최대 점수
- d[i] = max(d[i - 2] + a[i], d[i - 3] + a[i - 1] + a[i])
→ 1개 연속 : i - 2번째 계단은 밟고, i - 1번째 계단은 밟지 않아야 됨
→ 2개 연속 : i - 3번째 계단은 밟고, i - 2번째 계단은 밟지 않고, i - 1번째 계단은 밟아야 됨
소스 코드
- https://github.com/moomini/algorithm/blob/master/boj/2579.cpp
#include <cstdio>
#include <algorithm>
using namespace std;
int d[303];
int a[303];
int main(void) {
int n; scanf("%d", &n);
int ans = -1;
for (int i = 1; i <= n; ++i) {
scanf("%d", &a[i]);
if (i == 1) d[i] = a[i];
else if (i == 2) d[i] = a[i] + a[i - 1];
else d[i] = max(d[i - 2] + a[i], d[i - 3] + a[i - 1] + a[i]);
}
printf("%d\n", d[n]);
return 0;
}
|