본문 바로가기
백준알고리즘

백준 2096 내려가기 [DP][슬라이딩 윈도우]

by tiit 2020. 4. 19.
반응형

DP, 슬라이딩 윈도우 처음 풀기

그래서 블로그와 함께 품,,, ㅎ

 

수시간의 삽질끝에 풀었다.. ㅜ

 

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

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Collections;
import java.util.Deque;
import java.util.LinkedList;
import java.util.StringTokenizer;

public class BJ_2096 {

public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader (new InputStreamReader (System.in));
Deque deque = new LinkedList<>();


int N = Integer.parseInt(br.readLine());
int a[][] = new int [N][3];
int max[][] = new int [N][3];
int min[][] = new int [N][3];


StringTokenizer st ;


for(int i=0; i<N; i++) {
st = new StringTokenizer(br.readLine());
for(int j=0; j<3; j++) {
max[i][j] = Integer.parseInt(st.nextToken());
min[i][j] = max[i][j];
}

}



for(int i=1; i<N; i++) {
max[i][0] +=Math.max(max[i-1][0], max[i-1][1]);
max[i][1] +=Math.max(Math.max(max[i-1][0], max[i-1][1]), max[i-1][2]);
max[i][2] +=Math.max(max[i-1][1], max[i-1][2]);

min[i][0] +=Math.min(min[i-1][0], min[i-1][1]);
min[i][1] +=Math.min(Math.min(min[i-1][0], min[i-1][1]), min[i-1][2]);
min[i][2] +=Math.min(min[i-1][1], min[i-1][2]);



}

// System.out.println(min[N-1][0]);

Integer[] max1 = {max[N-1][0], max[N-1][1], max[N-1][2]};
int[] min1 = {min[N-1][0], min[N-1][1], min[N-1][2]};

// System.out.println(min1[0]);

Arrays.sort(max1, Collections.reverseOrder());
Arrays.sort(min1);

// System.out.println(min1[0]);

// for(int i=0; i<3; i++) {
// System.out.println(max1[i]+" "+min1[i]);
//
// }
System.out.print(max1[0]+" "+min1[0]);

// System.out.println(max[N-1][0]);
// System.out.println(max[N-1][1]);
// System.out.println(max[N-1][2]);
//
// System.out.println(min[N-1][0]);
// System.out.println(min[N-1][1]);
// System.out.println(min[N-1][2]);
}



}

 

-------------------------------------------------------------------------------------------------------------

굉장히 더러운 코드 짱난다

슬라이딩 윈도우 하려면 Deque 쓴다해서 deque만들었는데 도저히 어떻게 할 줄 모르겠어서 찾아보니

배열로만 풀었다.. 

 

max[N-1] 이 행에 맥스 값이 다 저장되는데 이걸 정렬 어떻게 하고 출력할지 몰라서 

시간 한참 걸림 빡대갈... ㅜ......ㅜ............ㅜ.........ㅜ

결국은 Arrays.sort(max1, Collections.reverseOrder()); // 이렇게 해서 풀었는데 ... 메서드 만들어서 풀어야 할 것같은데 어떻게 하는줄 모르겠다. . . . . . . . . . .

반응형

댓글