COBI-98
은로그
COBI-98
  • 은로그 (79)
    • Back-End (1)
      • Java (5)
      • Spring (16)
      • DB (1)
      • 알고리즘 (7)
      • ETC (2)
    • 개발 일기 (0)
    • 회고 (4)
    • Project (1)
      • 협업프로젝트 (7)
      • 국비프로젝트 (2)
    • Web (2)
      • Server (2)
    • Git (2)
    • CS (0)
    • 코딩테스트 (24)
      • 백준 (17)
      • 프로그래머스 (7)
    • 우아한 테크코스 (5)

블로그 메뉴

  • ✨깃허브
  • 홈
  • 방명록

공지사항

인기 글

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
COBI-98

은로그

[백준 / Java] 2178번 미로 탐색
코딩테스트/백준

[백준 / Java] 2178번 미로 탐색

2023. 1. 21. 23:58

사용한 알고리즘 (BFS)

BFS

https://cobi-98.tistory.com/36

 

[필수 알고리즘] BFS 너비 우선 탐색 (Queue 구조) 이해

BFS 너비 우선 탐색 (Breadth-First Search) 너비 우선 탐색(Breadth-first search, BFS)은 맹목적 탐색방법의 하나로 루트 노드(혹은 다른 임의의 노드)에서 시작해서 인접한 노드를 먼저 탐색한다. 그렇게 되

cobi-98.tistory.com

 

🔒 2178번 미로 탐색

✔ 문제 설명

🚩 요구사항 분석

  • int [ ][ ] N, M 미로 생성
  • 상하좌우로 이동할 수 있는 배열(dx, dy) 생성
  • 방문 체크 boolean 배열
  • 이동할 수 없는 경우 ( 0 , 방문한 경우, 미로 밖으로 나가는 경우) 조건 
  • while 문으로 현재 값 poll()
  • 이동할 수 있는 경우 큐에 넣기
  • 도착위치까지 반복

 

🔑 문제풀이

요구사항을 분석한 대로 상하좌우로 이동하는 배열을 돌려서,

조건 ( 이동할 수 없는 경우면 ) continue;

이동할 수 있으면 queue 에 담으면서 도착위치로 너비 우선 탐색을 해 나간다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;

public class Main {
    public static int N;
    public static int M;
    public static int[][] maze;
    public static int count;
    public static boolean[][] visit;
    public static int[] dx = {1, -1, 0, 0};
    public static int[] dy = {0, 0, 1, -1};


    public static Queue<int[]> queue = new LinkedList<>();


    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());

        maze = new int[N][M];
        visit = new boolean[N][M];

        for (int i = 0; i < N; i++) {
            String st2 = br.readLine();
            for (int j = 0; j < M; j++) {
                maze[i][j] = st2.charAt(j) - '0';
            }
        }
        visit[0][0] = true;
        bfs(0,0);
        System.out.println(maze[N-1][M-1]);

    }

    public static void bfs(int x, int y) {
        queue.add(new int[] {x,y});

        while(!queue.isEmpty()) {
            int now[] = queue.poll();
            int nowX = now[0];
            int nowY = now[1];

            for(int i=0; i<4; i++) {
                int nextX = nowX + dx[i];
                int nextY = nowY + dy[i];

                if (nextX < 0 || nextY < 0 || nextX >= N || nextY >= M)
                    continue;
                if (visit[nextX][nextY] || maze[nextX][nextY] == 0)
                    continue;

                queue.add(new int[] {nextX, nextY});
                maze[nextX][nextY] = maze[nowX][nowY] + 1;
                visit[nextX][nextY] = true;
            }
        }
    }
}

 

'코딩테스트 > 백준' 카테고리의 다른 글

[백준 / Java] 1697번 숨바꼭질  (0) 2023.01.22
[백준 / Java] 7576번 토마토  (0) 2023.01.22
[백준 / Java] 17090번 미로 탈출하기  (0) 2023.01.15
[백준 / Java] 1012번 유기농 배추  (0) 2023.01.15
[백준 / Java] 2667번 단지번호붙이기  (0) 2023.01.15
    '코딩테스트/백준' 카테고리의 다른 글
    • [백준 / Java] 1697번 숨바꼭질
    • [백준 / Java] 7576번 토마토
    • [백준 / Java] 17090번 미로 탈출하기
    • [백준 / Java] 1012번 유기농 배추
    COBI-98
    COBI-98
    배운 것을 응용하기 위해 기록하는 것을 선호하며 백엔드를 공부하고 있습니다.

    티스토리툴바