새소식

반응형
알고리즘/백준 문풀

[C++] 백준 BOJ - 내려가기 (2096)

  • -
728x90
반응형

링크 : https://www.acmicpc.net/problem/2096

 

2096번: 내려가기

첫째 줄에 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 숫자가 세 개씩 주어진다. 숫자는 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 중의 하나가 된다.

www.acmicpc.net

 

놓쳤던건 아니고 나는 역으로 생각했다 잘못생각함..ㅎ

잊을때쯤 다시한번 풀어보자용

아래서 위로 파악해야되는데, 위에서 아래로 파악하려했음

주어진 테스트케이스는 다 만족해서 잘 구현한줄알고 제출했는데 틀려서 왜인가했더니 !! 질문 게시판에 나랑 똑같이 생각한 사람이 있었당 ㅎㅎ

위에서 아래로 dp하다보면 충돌하는 케이스 생기는 ..  하나씩 써보면 알았을텐데.. 침착하고 꼼꼼하게 푸는 습관을 들이자 !!

 

공간 복잡도 관련, 문제에서 메모리 제한을 4MB로 매우 제한적이게 둠. but, 

int로 수십만개 배열을 선언해도 10MB 미만.
100만개 int = 4Bytes * 100만 = 400만 Bytes = 약 3.8MBytes

출처 : https://subbak2.com/23

 

[BOJ 백준] 내려가기(2096) C++, Java

링크 : https://www.acmicpc.net/problem/2096 2096번: 내려가기 첫째 줄에 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 숫자가 세 개씩 주어진다. 숫자는 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 중의 하나가 된다. www.acmicp

subbak2.com

#include <cstdio> #include <algorithm> #include<climits> int N, a,b,c; int dpMax[3], dpMin[3]; int m[3], M[3]; int main() { scanf("%d", &N); scanf("%d %d %d", &dpMax[0], &dpMax[1], &dpMax[2]); dpMin[0] = dpMax[0], dpMin[1] = dpMax[1], dpMin[2] = dpMax[2]; for (int i = 1; i < N;i++) { scanf("%d %d %d", &a, &b, &c); M[0] = std::max(dpMax[0],dpMax[1]) + a; M[1] = std::max(std::max(dpMax[0], dpMax[1]),dpMax[2]) + b; M[2] = std::max(dpMax[2], dpMax[1]) + c; m[0] = std::min(dpMin[0], dpMin[1]) + a; m[1] = std::min(std::min(dpMin[0], dpMin[1]),dpMin[2]) + b; m[2] = std::min(dpMin[2], dpMin[1]) + c; dpMax[0] = M[0], dpMax[1] = M[1], dpMax[2] = M[2]; dpMin[0] = m[0], dpMin[1] = m[1], dpMin[2] = m[2]; // 테스트용 출력 //printf("max\n"); //printf("%d %d %d", dpMax[0], dpMax[1], dpMax[2]); //printf("\nmin\n"); //printf("%d %d %d", dpMin[0], dpMin[1], dpMin[2]); //puts(""); } printf("%d %d", std::max(std::max(dpMax[0], dpMax[1]), dpMax[2]), std::min(std::min(dpMin[0], dpMin[1]), dpMin[2])); return 0; }
반응형

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.