문 제
소 스 코 드
#include<iostream>
#include<algorithm>
int main() {
int N;
std::cin >> N;
int *wine{ new int[N] };
for (int i = 0; i < N; ++i) std::cin >> wine[i];
int *temp{ new int[N] };
temp[0] = wine[0];
temp[1] = wine[0] + wine[1];
temp[2] = std::max({ wine[1] + wine[2], wine[0] + wine[2], wine[0] + wine[1]});
for (int i = 3; i < N; ++i) {
temp[i] = std::max(temp[i - 2] + wine[i], temp[i - 3] + wine[i - 1] + wine[i]);
temp[i] = std::max(temp[i - 1], temp[i]);
}
std::cout << temp[N - 1];
delete[] wine;
delete[] temp;
return 0;
}
풀 이
[백준] 계단 오르기 : https://studycl.tistory.com/33?category=1131353
- 계단 오르기 문제와 다른 점은 마지막 계단을 밟지 않아도 된다는 점이다.
-
6개의 포도잔 ( 6, 10, 13, 9, 8, 1) 이 있을 경우
첫 번째의 경우 1번 포도주를 먹는 경우인 : 6
두 번째의 경우 1번 2번 포도주를 먹는 경우 : 16
세 번째의 경우 2번 3번 포도주를 먹는 경우 : 23
네 번째의 경우 1번 3번 4번 포도주를 먹는 경우 : 28
다섯 번째의 경우 1번 2번 4번 5번 포도주를 먹는 경우 : 33
여섯 번째의 경우 2번 3번 5번 6번 포도주를 먹는 경우 : 32
위의 경우를 보면 볼 수 있지만, 다섯 번째의 경우가 여섯 번째의 경우보다 큰 것을 알 수 있다.
이는 마지막 포도주를 무조건 안먹어도 되는 경우가 있기 때문에 이전에 있는 누적값과 비교하여
더 높은 누적치로 바꿔서 정립해야 한다.
결 과 값
문 제 출 처
문제 링크 : [ BAEKJOON ] : https://www.acmicpc.net/problem/2156
'[ ALGORITHM ] > [ 백 준 ]' 카테고리의 다른 글
[BAEKJOON] 11054번 가장 긴 바이토닉 부분 수열 (0) | 2020.07.01 |
---|---|
[BAEKJOON] 11053번 가장 긴 증가하는 부분 수열 (0) | 2020.07.01 |
[BAEKJOON] 10844번 쉬운 계단 수 (0) | 2020.06.29 |
[BAEKJOON] 1463번 1로 만들기 (0) | 2020.06.28 |
[BAEKJOON] 2579번 계단 오르기 (0) | 2020.06.27 |