Skip to content

Commit b73433d

Browse files
committed
[Gold V] Title: 내려가기, Time: 152 ms, Memory: 111508 KB -BaekjoonHub
1 parent 408ffef commit b73433d

File tree

2 files changed

+58
-0
lines changed

2 files changed

+58
-0
lines changed
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# [Gold V] 내려가기 - 2096
2+
3+
[문제 링크](https://www.acmicpc.net/problem/2096)
4+
5+
### 성능 요약
6+
7+
메모리: 111508 KB, 시간: 152 ms
8+
9+
### 분류
10+
11+
다이나믹 프로그래밍, 슬라이딩 윈도우
12+
13+
### 제출 일자
14+
15+
2025년 4월 22일 19:53:47
16+
17+
### 문제 설명
18+
19+
<p>N줄에 0 이상 9 이하의 숫자가 세 개씩 적혀 있다. 내려가기 게임을 하고 있는데, 이 게임은 첫 줄에서 시작해서 마지막 줄에서 끝나게 되는 놀이이다.</p>
20+
21+
<p>먼저 처음에 적혀 있는 세 개의 숫자 중에서 하나를 골라서 시작하게 된다. 그리고 다음 줄로 내려가는데, 다음 줄로 내려갈 때에는 다음과 같은 제약 조건이 있다. 바로 아래의 수로 넘어가거나, 아니면 바로 아래의 수와 붙어 있는 수로만 이동할 수 있다는 것이다. 이 제약 조건을 그림으로 나타내어 보면 다음과 같다.</p>
22+
23+
<p><img alt="" src="https://www.acmicpc.net/JudgeOnline/upload/201007/down.png" style="height:92px; width:685px"></p>
24+
25+
<p>별표는 현재 위치이고, 그 아랫 줄의 파란 동그라미는 원룡이가 다음 줄로 내려갈 수 있는 위치이며, 빨간 가위표는 원룡이가 내려갈 수 없는 위치가 된다. 숫자표가 주어져 있을 때, 얻을 수 있는 최대 점수, 최소 점수를 구하는 프로그램을 작성하시오. 점수는 원룡이가 위치한 곳의 수의 합이다.</p>
26+
27+
### 입력
28+
29+
<p>첫째 줄에 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 숫자가 세 개씩 주어진다. 숫자는 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 중의 하나가 된다.</p>
30+
31+
### 출력
32+
33+
<p>첫째 줄에 얻을 수 있는 최대 점수와 최소 점수를 띄어서 출력한다.</p>
34+
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import sys
2+
input = sys.stdin.readline
3+
4+
N = int(input())
5+
6+
a, b, c = map(int, input().split())
7+
dp_max = [a, b, c]
8+
dp_min = [a, b, c]
9+
10+
for _ in range(N-1):
11+
a, b, c = map(int, input().split())
12+
13+
max0 = max(dp_max[0], dp_max[1]) + a
14+
max1 = max(dp_max[0], dp_max[1], dp_max[2]) + b
15+
max2 = max(dp_max[1], dp_max[2]) + c
16+
17+
min0 = min(dp_min[0], dp_min[1]) + a
18+
min1 = min(dp_min[0], dp_min[1], dp_min[2]) + b
19+
min2 = min(dp_min[1], dp_min[2]) + c
20+
21+
dp_max = [max0, max1, max2]
22+
dp_min = [min0, min1, min2]
23+
24+
print(max(dp_max), min(dp_min))

0 commit comments

Comments
 (0)