개발자를 향해...
백준 - 14503번 로봇청소기 (java) 본문
728x90
반응형
https://www.acmicpc.net/problem/14503
문제 이해하는데 오래 걸렸다.
그리고 다 풀고 답이 자꾸 틀려서 한참 헤맸는데 원인은 왼쪽으로 방향돌리고 탐색 후 다시 재귀로 되돌아 왔을 때 return으로 아예 나가야하는데 break를 넣어서 이후에 백으로 가는 코드가 실행되도록해서 답이 다르게 나왔다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class 로봇청소기14503 {
public static int n,m;
public static int[][] map;
public static int[] dx ={0,1,0,-1};
public static int[] dy ={-1,0,1,0};
public static int count;
public static void main(String[] args)throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String[] t = bf.readLine().split(" ");
n = Integer.parseInt(t[0]);
m = Integer.parseInt(t[1]);
map = new int[n][m];
t = bf.readLine().split(" ");
int x = Integer.parseInt(t[1]);
int y = Integer.parseInt(t[0]);
int cd = Integer.parseInt(t[2]);
for( int i = 0; i<n; i++ ){
t = bf.readLine().split(" ");
for( int j = 0; j<m; j++)
map[i][j] = Integer.parseInt(t[j]);
}
count=1;
dfs( x, y, cd );
System.out.println(count);
}
public static void dfs(int x, int y, int cd){
map[y][x] = 2;
System.out.println(x+","+y);
for( int i = 0; i<n; i++ ){
for( int j = 0; j<m; j++)
System.out.print(map[i][j]+" ");
System.out.println("");
}
System.out.println("");
for(int i =0; i<4; i++){
cd= (cd+3)%4;
int nx = dx[cd]+x;
int ny = dy[cd]+y;
if(nx>=0 && ny>=0 && ny<n && nx<m && map[ny][nx]==0){
count++;
dfs(nx,ny,cd);
// break;
return;
}
}
int back = (cd+2)%4;
int nx = dx[back]+x;
int ny = dy[back]+y;
if(nx>=0 && ny>=0 && nx<m && ny<n && map[ny][nx]!=1){
dfs(nx,ny,cd);
}
}
}
반응형
'코테 공부' 카테고리의 다른 글
백준 -9465 스티커 (java) (0) | 2022.04.23 |
---|---|
백준 - 1449 수리공 항승 (java) (0) | 2022.04.23 |