인프런 커뮤니티 질문&답변

신나는 라이언님의 프로필 이미지
신나는 라이언

작성한 질문수

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비

11. 미로의 최단거리 통로(BFS)

dis 배열 없이 풀어봤습니다

작성

·

272

·

수정됨

0

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

class Point {
    int x;
    int y;
    Point(int x, int y) {
        this.x = x;
        this.y = y;
    }
}

public class Main {
    static int[] dx = {-1, 0, 1, 0};
    static int[] dy = {0, -1, 0, 1};
    static int[][] board = new int[8][8];
    public static void BFS(int x, int y) {
        int L = 0;
        Queue<Point> Q = new LinkedList<>();
        Q.offer(new Point(x,y));
        while(!Q.isEmpty()) {
            int len = Q.size();
            for(int i=0; i<len; i++) {
                Point tmp = Q.poll();
                for(int j=0; j<4; j++) {
                    int nx = tmp.x + dx[j];
                    int ny = tmp.y + dy[j];
                    if (nx >= 1 && nx <= 7 && ny >= 1 && ny <= 7 && board[nx][ny] == 0) {
                        board[nx][ny] = L+1;
                        Q.offer(new Point(nx, ny));
                    }
                }
            }
            L++;
        }
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        for(int i=1; i<=7; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            for(int j=1; j<=7; j++) {
                board[i][j] = Integer.parseInt(st.nextToken());
            }
        }
        BFS(1,1);
        if(board[7][7] == 0) System.out.println(-1);
        else System.out.println(board[7][7]);

    }
}

dis 배열없이 레벨과 board 배열만으로 풀었는데, 채점 결과 맞긴했는데 이렇게 짜도 될까요?

답변 2

0

김태원님의 프로필 이미지
김태원
지식공유자

안녕하세요^^

레벨변수인 L 변수를 잘 활용한 코드입니다. 잘 하셨습니다.

0

안녕하세요, 인프런 AI 인턴이에요.

주어진 코드는 8x8 보드에서 BFS(너비 우선 탐색)을 이용하여 최단 거리를 구하는 알고리즘입니다.

Point 클래스는 좌표를 표현하는 클래스로, x와 y 값을 가지고 있습니다.

BFS 함수에서는 시작 좌표(x, y)를 인자로 받아 큐에 추가하고, 큐가 빌 때까지 반복하면서 인접한 좌표를 탐색합니다.

탐색 과정에서 해당 좌표가 유효하고, 방문하지 않았을 경우에는 해당 위치의 값을 현재 위치의 값(L) +1 로 업데이트하고, 큐에 추가합니다.

이 과정을 반복하면서 가장 외부에서부터 내부로 이동하며 값(L)을 업데이트합니다.

main 함수에서는 보드의 상태를 입력받아 배열에 저장한뒤 BFS 함수를 호출합니다.

이 코드는 입력 처리 부분이 누락되어 있어서 완전한 코드가 아닙니다. 입력 처리 부분을 추가한 뒤 실행해보시면 정상적으로 작동할 것입니다.

추가로, 이 코드는 보드의 크기가 7x7 이어야 정상적으로 동작합니다. 만약 다른 크기의 보드를 사용하려면 배열의 크기와 입력 처리 부분을 변경해야 합니다.

더 자세한 내용이 필요하시면 추가적인 질문을 해주세요. 요

신나는 라이언님의 프로필 이미지
신나는 라이언

작성한 질문수

질문하기