DP 기본...은 아니고 미묘하게 심화된 기본문제
양자화에서 이미 기가 다 빨려서 ㅠ 시벌탱~~~
재귀로 풀어야되는데 귀찮아서 안햇다~~~~~
알빠야~~~~~ 힘드렁~~~~
제출해보니 왠걸 바로 정답처리 ㄱㅇㄷ
printBoard 함수는 걍 만들어놈 보기쉽게 ㅎㅎ
public class DiamondPath {
static int[][] resultBoard;
static int[][] board;
static int N;
public static void main(String[] args) throws Exception{
StringBuilder sb = new StringBuilder();
java.io.BufferedReader br = new java.io.BufferedReader(new java.io.InputStreamReader(System.in));
int num = Integer.parseInt(br.readLine());
for(;num>0;num--){
N = Integer.parseInt(br.readLine());
resultBoard = new int[2*N-1][N];
board = new int[2*N-1][N];
for(int x=0;x<2*N-1;x++){
doDP(x,br.readLine());
}
sb.append(resultBoard[2*N-2][0]).append('\n');
}
System.out.println(sb.toString());
}
public static String printBoard(int[][] board, int n){
StringBuilder sb = new StringBuilder();
sb.append("==========================\n");
for(int x=0;x<2*n-1;x++){
for(int y = 0; y < n; y++) {
sb.append(board[x][y]+"\t");
}
sb.append("\n");
}
sb.append("==========================\n");
System.out.println(sb.toString());
return sb.toString();
}
public static void doDP(int x, String line){
if(x==2*N-1) return ;
if(x==0) {
resultBoard[0][0] = Integer.parseInt(line);
}else {
int result;
int beforeNum;
int afterNum;
int y = 0;
for(String s : line.split(" ")) {
if (x < N) {
beforeNum = y-1;
afterNum = y;
} else {
beforeNum = y;
afterNum = y + 1;
}
if (beforeNum < 0) result = resultBoard[x - 1][afterNum] + Integer.parseInt(s);
else if (afterNum >= N) result = resultBoard[x - 1][beforeNum] + Integer.parseInt(s);
else {
result = Math.max(resultBoard[x - 1][beforeNum],resultBoard[x - 1][afterNum]) + Integer.parseInt(s);
}
resultBoard[x][y] = result;
y++;
}
}
}
}
시간되면 리팩토링하고~~ 아님말고~~~ 인생뭐잇어~~
'Develope > 알고리즘' 카테고리의 다른 글
[백준 - 2140] 지뢰찾기 (0) | 2017.12.19 |
---|---|
[알고스팟] XHAENEUNG (5) | 2017.12.11 |
[알고스팟] Quantization (0) | 2017.12.04 |
[알고스팟, 백준 9663] N-Queen (0) | 2017.12.04 |
[백준-10825] 국영수 (2) | 2017.11.29 |