새소식

algorithm/문제풀이

[프로그래머스] 게임 맵 최단거리 (Java)

  • -

프로그래머스 : 게임 맵 최단거리 (Java)

문제

문제 확인하기

풀이

(1, 1) 위치에서 출발해서 우측 하단 좌표인 (n, m) 위치까지 몇번의 이동이 걸리는지 구하는 문제이다.

BFS를 통해 문제를 해결할 수 있다.

BFS에 대한 설명은 아래 링크에서 확인할 수 있다.
BFS 확인하기

아래는 자바로 작성한 코드이다.

class Solution {
    // 맵 세로 크기
    private static int rowSize;
    // 맵 가로 크기
    private static int colSize;
    // {x, y} 형식으로 큐에 삽입
    private static Queue<int[]> queue = new LinkedList<>();

    public int solution(int[][] maps) {
        int answer = 0;

        rowSize = maps.length;
        colSize = maps[0].length;

        // 1, 1 위치에서 시작
        visit(0, 0, maps);

        while (!queue.isEmpty()) {
            // 반복마다 이동한 횟수 추가
            answer++;
            int currentSize = queue.size();
            // 현재 큐에 있는 수 만큼 반복
            while (currentSize > 0) {
                int[] poll = queue.poll();
                currentSize--;
                // 상대 진영에 도착했으면 리턴
                if (poll[0] == colSize - 1 && poll[1] == rowSize - 1) return answer;

                // 상하좌우 방문
                visit(poll[0] - 1, poll[1], maps);
                visit(poll[0] + 1, poll[1], maps);
                visit(poll[0], poll[1] - 1, maps);
                visit(poll[0], poll[1] + 1, maps);
            }
        }
        // 리턴되지 않았으면 도착 불가능함.
        return -1;
    }

    private void visit(int x, int y, int[][] maps) {
        // 방문할 수 있는 곳이면 방문
        if (x >= 0 && x < colSize && y >= 0 && y < rowSize && maps[y][x] == 1) {
            queue.add(new int[]{x, y});
            maps[y][x] = 0;
        }
    }
}
[프로그래머스] 게임 맵 최단거리 (Java)

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.