Algorithm
[BAEKJOON] 1937번 : 욕심쟁이 판다 (JAVA)
멍목
2022. 11. 26. 17:40
반응형
- 알고리즘 분류 : DFS, DP
- 사용 언어 : JAVA
소스 설명은 주석을 참고해주세요.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
// Link : https://www.acmicpc.net/problem/1937
// 참고한 블로그 : https://steady-coding.tistory.com/39
public class Main {
public static int N;
public static int[][] map;
public static int[][] dp;
public static int[] xmove = {-1,1,0,0};
public static int[] ymove = {0,0,-1,1};
public static int MAX = 0;
public static void main(String[] args) throws IOException{
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
map = new int[N][N];
dp = new int[N][N];
for(int i=0; i<N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
for(int j=0; j<N; j++) {
map[i][j] = Integer.parseInt(st.nextToken());
}
}
// DFS 전체탐색
for(int i=0; i<N; i++) {
for(int j=0; j<N; j++) {
int cnt = DFS(i,j);
MAX = Math.max(MAX, cnt);
}
}
System.out.println(MAX);
}
// DP와 DFS이용
// DP를 이용하기 때문에 방문 체크변수는 이용하지 않음
public static int DFS(int y, int x) {
if(dp[y][x] != 0) {
return dp[y][x];
}
dp[y][x] = 1;
for(int i=0; i<4; i++) {
int tempY = y + ymove[i];
int tempX = x + xmove[i];
if(tempY < 0 || tempY >= N || tempX < 0 ||tempX >= N) {
continue;
}
if(map[y][x] < map[tempY][tempX]) {
dp[y][x] = Math.max(dp[y][x], DFS(tempY, tempX) + 1);
}
}
return dp[y][x];
}
}
반응형