게임 맵 최단거리

LJM·2023년 3월 24일
0

programmers

목록 보기
3/92

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

출발지에서 목적지까지 최단거리가 몇칸걸리냐를 찾는 문제이다
bfs로 쉽게 풀었다

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

class Node
{
    int r;
    int c;
    public Node(int r, int c)
    {
        this.r = r;
        this.c = c;
    }
}

class Solution {
    public int solution(int[][] maps) {
        int answer = 0;
        
        answer = bfs(maps, new Node(0, 0));

        return answer;
    }
    
    static int bfs(int[][] maps, Node start)
    {
        int m = maps.length;
        int n = maps[0].length;
        
        int[][] visit = new int[m][n];
        for(int i = 0; i < m; ++i)
        {
            Arrays.fill(visit[i], -1);    
        }
        
        Queue<Node> que = new LinkedList<>();
        que.add(start);
        visit[start.r][start.c] = 1;
        
        int[][] dir = {{-1, 0}, {0, 1}, {1, 0}, {0, -1}};
        
        while(false == que.isEmpty())
        {
            Node cur = que.poll();
            
            if(cur.r == (m-1) && cur.c == (n-1))
                break;
            
            for(int i = 0; i < 4; ++i)
            {
                int nr = cur.r + dir[i][0];
                int nc = cur.c + dir[i][1];
                
                if(nr < 0 || nr >= m || nc < 0 || nc >= n)
                    continue;
                
                if(visit[nr][nc] != -1)
                    continue;
                
                if(maps[nr][nc] == 0)
                    continue;
                
                que.add(new Node(nr, nc));
                visit[nr][nc] = visit[cur.r][cur.c]+1;
                              
            }
        }
        
        return visit[m-1][n-1];
    }
}
profile
게임개발자 백엔드개발자

0개의 댓글