일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- #알고리즘 #백준 #12094 #백준12094 #algorithm #baekjoon #baekjoon12094 #C++
- #알고리즘 #백준 #5214 #백준5214 #algorithm #baekjoon #baekjoon5214 #C++
- #알고리즘 #백준 #2616 #백준2616 #algorithm #baekjoon #baekjoon2616 #Java
- #알고리즘 #백준 #17136 #백준17136 #algorithm #baekjoon #baekjoon17136 #C++
- #알고리즘 #백준 #17406 #백준17406 #algorithm #baekjoon #baekjoon17406 #C++
- #알고리즘 #백준 #15683 #백준15683 #algorithm #baekjoon #baekjoon15683 #C++
- #알고리즘 #백준 #2352 #백준2352 #algorithm #baekjoon #baekjoon2352 #C++
- #알고리즘 #algorithm #프로그래머스 #2020카카오공채 #외벽점검 #programmers #C++
- #알고리즘 #algorithm #프로그래머스 #2020카카오공채 #괄호변환 #programmers #C++
- #알고리즘 #백준 #17472 #백준17472 #algorithm #baekjoon #baekjoon17472 #C++
- #알고리즘 #algorithm #프로그래머스 #2020카카오공채 #문자열압축 #programmers #C++
- #알고리즘 #백준 #14888 #백준14888 #algorithm #baekjoon #baekjoon14888 #C++
- #알고리즘 #백준 #17140 #백준17140 #algorithm #baekjoon #baekjoon17140 #C++
- #알고리즘 #백준 #1793 #백준1793 #algorithm #baekjoon #baekjoon1793 #C++
- #알고리즘 #백준 #1987 #백준1987 #algorithm #baekjoon #baekjoon1987 #Java
- 스레드 #동시성 #thread #process #
- #알고리즘 #algorithm #프로그래머스 #2020카카오공채 #블록이동하기 #programmers #C++
- #알고리즘 #백준 #15684 #백준15684 #algorithm #baekjoon #baekjoon15684 #C++
- 클린코드
- 개발서
- 개발자취미
- #알고리즘 #백준 #4386 #백준4386 #algorithm #baekjoon #baekjoon4386 #C++
- #알고리즘 #백준 #17837 #백준17837 #algorithm #baekjoon #baekjoon17837 #C++
- #알고리즘 #백준 #2580 #백준2580 #algorithm #baekjoon #baekjoon2580 #Java
- #알고리즘 #백준 #1525 #백준1525 #algorithm #baekjoon #baekjoon1525 #C++
- CleanCode
- #알고리즘 #백준 #2573 #백준2573 #algorithm #baekjoon #baekjoon2573 #C++
- #알고리즘 #백준 #1260 #백준1260 #algorithm #baekjoon #baekjoon1260 #Java
- 책리뷰
- #알고리즘 #백준 #3190 #백준3190 #algorithm #baekjoon #baekjoon3190 #C++
- Today
- Total
개발자 일기장.
백준 2096. 내려가기 본문
내려가기
Problem?
N 줄에 0 이상 9 이하의 숫자가 세 개씩 적혀 있다. 내려가기 게임을 하고 있는데, 이 게임은 첫 줄에서 시작해서 마지막 줄에서 끝나게 되는 놀이이다.
먼저 처음에 적혀 있는 세 개의 숫자 중에서 하나를 골라서 시작하게 된다. 그리고 다음 줄로 내려가는데, 다음 줄로 내려갈 때에는 다음과 같은 제약 조건이 있다. 바로 아래의 수로 넘어가거나, 아니면 바로 아래의 수와 붙어 있는 수로만 이동할 수 있다는 것이다. 이 제약 조건을 그림으로 나타내어 보면 다음과 같다.
별표는 현재 위치이고, 그 아랫 줄의 파란 동그라미는 원룡이가 다음 줄로 내려갈 수 있는 위치이며, 빨간 가위표는 원룡이가 내려갈 수 없는 위치가 된다. 숫자 표가 주어져 있을 때, 얻을 수 있는 최대 점수, 최소 점수를 구하는 프로그램을 작성하시오. 점수는 원룡이가 위치한 곳의 수의 합이다.
Input
첫째 줄에 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 숫자가 세 개씩 주어진다. 숫자는 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 중의 하나가 된다.
Output
첫째 줄에 얻을 수 있는 최대 점수와 최소 점수를 띄어서 출력한다.
Solution
dp문제.
경우를 나누어서 생각하면 되는 문제
1) 왼쪽의 경우 - 왼쪽과 가운데에서 내려올 수 있다.
2) 가운데의 경우 - 왼쪽, 오른쪽, 가운데에서 내려올 수 있다.
3) 오른쪽의 경우 - 가운데와 오른쪽에서 내려올 수 있다.
가정 arr : 현재 최댓값을 보관 tmp : 이전 정보를 보관(메모리 초과 방지) |
Code
#include <iostream>
#include <algorithm>
using namespace std;
int arr_max[3], arr_min[3];
int tmp_max[3], tmp_min[3];
int main() {
int n;
cin >> n;
int arr[3];
for (int i = 1; i <= n; i++) {
scanf("%d %d %d", &arr[0], &arr[1], &arr[2]);
arr_max[0] = max(tmp_max[0], tmp_max[1]) + arr[0];
arr_max[1] = max(max(tmp_max[0], tmp_max[1]), tmp_max[2]) + arr[1];
arr_max[2] = max(tmp_max[1], tmp_max[2]) + arr[2];
arr_min[0] = min(tmp_min[0], tmp_min[1]) + arr[0];
arr_min[1] = min(min(tmp_min[0], tmp_min[1]), tmp_min[2]) + arr[1];
arr_min[2] = min(tmp_min[1], tmp_min[2]) + arr[2];
tmp_max[0] = arr_max[0]; tmp_max[1] = arr_max[1]; tmp_max[2] = arr_max[2];
tmp_min[0] = arr_min[0]; tmp_min[1] = arr_min[1]; tmp_min[2] = arr_min[2];
}
cout << max(max(arr_max[0], arr_max[1]), arr_max[2]) << " ";
cout << min(min(arr_min[0], arr_min[1]), arr_min[2]) << "\n";
return 0;
}
dp문제
메모리 터지는 것만 신경쓰면 어렵지 않았던 문제
'취업 > Algorithm.' 카테고리의 다른 글
백준 12852. 1로 만들기 2 (0) | 2020.03.06 |
---|---|
백준 12849. 본대 산책 (0) | 2020.03.06 |
백준 2448. 별 찍기 - 11 (0) | 2020.03.03 |
백준 16953문제. A→B (0) | 2020.03.02 |
백준 1043문제. 거짓말 (0) | 2020.03.01 |