일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Kotlin
- 스프링
- 백트래킹
- hackerrank
- TensorFlow
- 백준
- Map
- 블로그개설
- Android
- stl
- vue.js
- 프로그래머스
- Rebase
- 스프링 프레임워크
- git
- DP
- ADAS
- retrofit
- BFS
- 스프링프레임워크
- python3
- 프로그래밍
- 연결리스트
- 카카오인코더
- 머신러닝
- c++
- 인코더
- c
- 안드로이드
- spring
Archives
- Today
- Total
이것저것 공부한 기록
C++) 백준 2579번 풀이_계단 오르기 본문
https://www.acmicpc.net/problem/2579
ㅋ ㅋ...ㅋㅋㅋ 장난
끝 계단을 꼭 올라야 한다는 거에 사로잡혀서 끝부터 계산한다고 삽질했다.
규칙을 그래프로 그려서 덩어리로 뭉뚱그리는게 훨 편하다고 생각하게 된 문제
n번째 계단을 밟는 경우는
1. n-1번째 계단을 밟고 올라온 경우와
2. n-2번째 계단을 밟고 올라온 경우가 있는데
여기서 n-1번째 계단을 밟는 경우는
1-1. n-3번째 계단을 밟고 올라오는 경우
밖에 없다.
3계단을 한 번에 올라갈 수가 없기 때문에,
n-2를 밟았을 경우 n-2 -> n-1 -> n번째 계단을 밟는다는 과정이 성립되지 않기 때문.
n-2번째 계단을 밟는 경우는 딱히 제한이 없으므로
2-1. n-3번째 계단을 밟고 올라오는 경우
2-2. n-4번째 계단을 밟고 올라오는 경우
로 나누어 짐.
이걸 그림으로 그려보면
이렇게 되는데
여기서 패턴을 찾으면
이런 느낌(...)
이걸 식으로 나타내면
S[i]= val[i]+val[i-1]+S[i-3] or val[i] + S[i-2]
하게끔 코드를 짜면 됩니다.
#include<stdio.h>
#include<algorithm>
using namespace std;
int main(void) {
int i, cnt;
int inp[301];
int cal[301];
scanf("%d", &cnt);
for (i = 1; i <= cnt; ++i)
{
scanf("%d", &inp[i]);
}
cal[1] = inp[1];
cal[2] = inp[1] + inp[2];
cal[3] = max(inp[2] + inp[3], inp[1] + inp[3]);
for (i = 4; i <= cnt; ++i)
{
cal[i] = max(inp[i] + inp[i - 1] + cal[i - 3], inp[i] + cal[i - 2]);
}
printf("%d", cal[cnt]);
}
'Study > 프로그래밍 문제풀이' 카테고리의 다른 글
C++) 백준 1699번 풀이_제곱수의 합 (0) | 2019.10.23 |
---|---|
C++) 백준 2156번 풀이_포도주 시식 (0) | 2019.10.20 |
C++) 백준 9465번 풀이_스티커 (0) | 2019.10.20 |
C++) 백준 10844번 풀이_쉬운 계단 수 (0) | 2019.10.18 |
C++)백준 1149번 풀이 _ RGB 거리 (0) | 2019.10.18 |