본문 바로가기

알고리즘

[백준,Java] 2178번: 미로 탐색

https://www.acmicpc.net/problem/2178

 

2178번: 미로 탐색

첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다.

www.acmicpc.net

 

이전에 파이썬으로 풀었던 문제이지만 Java의 문법 공부와 함께.. 새롭게 풀어 본 문제입니다.

 

bfs로 풀었으며 Scanner는 속도 이슈가 생겨서 안쓰고.. BufferedReader, StringTokenizer를 사용하였습니다.

(이 개념은 다시 정리해보겠습니다.)

 

문법적인 문제로.. 컴파일 에러, 런타임 에러.. 많이 발생하였습니다.. 반성하고 자바로 앞으로 계속 연습할 생각입니다..

 

 

import java.util.*;
import java.io.*;

public class Main
{
    static int[][] arr;
    static int[][] chk;
    static int n;
    static int m;

    static int[] dx = {-1,1,0,0};
    static int[] dy = {0,0,-1,1};

    public static int ps(int x, int y,int cnt){
        Queue<int[]> q = new LinkedList<>();
        chk = new int[n][m];
        q.add(new int[] {x,y,1});

        while(!q.isEmpty()){
            int temp[] = q.poll();
            x = temp[0];
            y = temp[1];
            cnt = temp[2];
            chk[x][y] = 1;
            if(x==n-1 && y==m-1){
                return cnt;
            }
            for(int i= 0; i < 4; i++){
                if(x + dx[i] >= 0 && x + dx[i] < n && y + dy[i] >=0 && y + dy[i] < m){
                    if(arr[x + dx[i]][y+dy[i]] == 1 && chk[x + dx[i]][y+dy[i]] == 0){
                        chk[x + dx[i]][y+dy[i]] = 1;
                        q.add(new int[] {x + dx[i],y+dy[i],cnt+1});
                    }
                }
            }
        }

        return 0;
    }


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

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        n = Integer.parseInt(st.nextToken());
        m = Integer.parseInt(st.nextToken());

        arr = new int[n][m];
        for(int i=0; i<n; i++) {
            String s = br.readLine();
            for(int j=0; j<m; j++) {
                arr[i][j] = s.charAt(j) - '0';
            }
        }
        int result = ps(0,0,0);

        System.out.println(result);

    }
}