삐까냥의 파도타기

Q1937. 욕심쟁이 판다 본문

코딩/백준 알고리즘

Q1937. 욕심쟁이 판다

금손형아 2019. 2. 22. 02:07

map[y][x] 에서의 최대값을 저장하며 검색하는 로직


package ppikanyang;


import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.util.StringTokenizer;


public class Q1937 {


static int[][] map;

static int[][] resultMap;

static int mapSize;

public static void main(String[] args) throws Exception {

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

StringTokenizer st = new StringTokenizer(br.readLine());

mapSize = Integer.parseInt(st.nextToken());

map = new int[mapSize+1][mapSize+1];

resultMap = new int[mapSize+1][mapSize+1];

for (int i = 1; i <= mapSize; i++) {

st = new StringTokenizer(br.readLine());

for (int j = 1; j <= mapSize; j++) {

map[i][j] = Integer.parseInt(st.nextToken());

}

}

int maxValue = 0;

for (int i = 1; i <= mapSize; i++) {

for (int j = 1; j <= mapSize; j++) {

resultMap[i][j] = searchMap(i, j);

maxValue = Math.max(maxValue, resultMap[i][j]);

}

}

System.out.println(maxValue+1);

}

public static int searchMap(int y, int x) {

if (resultMap[y][x] > 0) {

return resultMap[y][x];

}

int maxValue = 0;

if (y < mapSize && map[y][x] < map[y+1][x]) {

maxValue = Math.max(maxValue, searchMap(y+1, x)+1);

}

if (y > 1 && map[y][x] < map[y-1][x]) {

maxValue = Math.max(maxValue, searchMap(y-1, x)+1);

}

if (x < mapSize && map[y][x] < map[y][x+1]) {

maxValue = Math.max(maxValue, searchMap(y, x+1)+1);

}


if (x > 1 && map[y][x] < map[y][x-1]) {

maxValue = Math.max(maxValue, searchMap(y, x-1)+1);

}

resultMap[y][x] = maxValue;

return maxValue;

}

}




'코딩 > 백준 알고리즘' 카테고리의 다른 글

Q1904. 01타일  (0) 2019.02.23
Q2096. 내려가기  (0) 2019.02.23
Q1915. 가장 큰 정사각형  (0) 2019.02.21
Q6359. 만취한 상범  (0) 2019.02.21
Q1309. 동물원  (0) 2019.02.21