본문 바로가기
Algorithm Study/Programmers (JAVA)

프로그래머스_게임 맵 최단거리_JAVA

by 창브로 2024. 5. 3.
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/1844

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

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

class Solution {
    static boolean[][] visited;
    static int row;
    static int col;
    static int[] dx = {-1, 1, 0, 0};
    static int[] dy = {0, 0, 1, -1};
    static int answer = -1;
    static int[][] map;

    public int solution(int[][] maps) {
        row = maps.length;
        col = maps[0].length;
        visited = new boolean[row][col];
        map = new int[row][col];

        for (int i = 0; i < row; i++) {
            for (int j = 0; j < col; j++) {
                map[i][j] = maps[i][j];
            }
        }

        visited[0][0] = true;
        bfs(0, 0, 1);

        return answer;
    }

    public void bfs(int x, int y, int c) {
        Queue<int[]> queue = new LinkedList<>();
        queue.add(new int[]{x, y, c});

        while (!queue.isEmpty()) {
            int[] cur = queue.poll();
            int cx = cur[0];
            int cy = cur[1];
            int cc = cur[2];

            if (cx == row - 1 && cy == col - 1) {
                answer = cc;
            }

            for (int i = 0; i < 4; i++) {
                int nx = cx + dx[i];
                int ny = cy + dy[i];
                int nc = cc + 1;


                if (nx >= 0 && ny >= 0 && nx < row && ny < col && !visited[nx][ny] && map[nx][ny] == 1) {
                    visited[nx][ny] = true;
                    queue.add(new int[]{nx, ny, nc});
                }
            }
        }
    }
}

 

 

 

회고

- 진짜 쉬운 bfs문제였다

- 하지만 에디터를 사용하지 않고 백준이랑 다른 방법으로 풀려하니까 생각보다 문법오류가 났다

- 에디터를 사용하지 않고 문제를 푸는 방법을 더 공부해야겠다.