알고리즘/프로그래머스

게임 맵 최단거리_bfs

베리영young 2023. 12. 31. 17:47

사용 알고리즘: bfs

사용 언어: java

 

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

class Solution {
    static int[] dx = {-1,1,0,0};
    static int[] dy = {0,0,-1,1};
    static boolean[][] visited;
    static int answer = Integer.MAX_VALUE;
    
    public int solution(int[][] maps) {
        int n = maps.length;
        int m = maps[0].length;
        visited = new boolean[n][m];
        visited[0][0] = true;
        fs(0,0, maps, 1, n,m);
        
        // int answer = 0;
        return answer==Integer.MAX_VALUE ? -1 : answer;
    }
    
    public void fs(int x, int y, int[][] maps, int cnt, int n, int m){
        Queue<int[]> q = new ArrayDeque<>();
        q.offer(new int[] {x,y, cnt});
        
        while(!q.isEmpty()) {
            int[] p = q.poll();
            for(int d=0; d<4; d++) {
                int nx = p[0] + dx[d];
                int ny = p[1] + dy[d];
                
                if(nx==n-1 && ny==m-1){
                    answer = Math.min(answer, p[2]+1); //조심
                    return;
                }
                
                if(nx>=0 && nx<n && ny>=0 && ny<m && maps[nx][ny]==1 && !visited[nx][ny]) {
                    visited[nx][ny] = true;
                    q.offer(new int[] {nx,ny, p[2]+1}); //조심
                }
            }
        }
        
        return;
    }
}

 

이슈:

길이 있는 맵에서 자꾸 2가 답이 되어 문제 -> p[2]를 사용하지 않고 cnt를 사용하여서 계속 1+1만 하고 있었음. 변수 조심!

'알고리즘 > 프로그래머스' 카테고리의 다른 글

단어 변환  (0) 2024.01.05
** 순위 **  (1) 2024.01.03
게임 맵 최단거리 _ dfs  (1) 2023.12.30
올바른 괄호  (0) 2023.12.30
더 맵게  (0) 2023.12.30