개발자를 향해...

백준 - 14503번 로봇청소기 (java) 본문

코테 공부

백준 - 14503번 로봇청소기 (java)

eugeneHwang1124 2022. 4. 23. 19:16
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