코딩테스트/💯프로그래머스 코딩테스트 연습

프로그래머스 BFS - 게임 맵 최단거리

1son 2023. 2. 16. 13:00

 

참고하여 코드 작성해봅시다.

 https://tmdrl5779.tistory.com/216

 

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

https://programmers.co.kr/learn/courses/30/lessons/1844 코딩테스트 연습 - 게임 맵 최단거리 [[1,0,1,1,1],[1,0,1,0,1],[1,0,1,1,1],[1,1,1,0,1],[0,0,0,0,1]] 11 [[1,0,1,1,1],[1,0,1,0,1],[1,0,1,1,1],[1,1,1,0,0],[0,0,0,0,1]] -1 programmers.co.kr 문

tmdrl5779.tistory.com

 

 

BFS를 공부하고 있다. 

Breadth Frirst Search 

너비 우선 탐색

 

쉽지 않다. ;.

 

추천을 받아 바킹 독님의 BFS 게시물을 정독했다.

https://blog.encrypted.gg/941

 

[실전 알고리즘] 0x09강 - BFS

안녕하세요 여러분, 드디어 올 것이 왔습니다. 마음의 준비를 단단히 하셔야 합니다.. 드디어 실전 알고리즘 강의에서 첫 번째 고비에 도달했는데 이 강의와 함께 이번 고비를 잘 헤쳐나가면 좋

blog.encrypted.gg

 

다차원 배열에서 각 칸을 방문할 때 너비를 우선으로 탐색하는 알고리즘 

 

import java.util.*;

class Solution {
    
    int[] dx = {1,0,-1,0};
    int[] dy = {0,1,0,-1};
    
    public int solution(int[][] maps) {
        int answer = 0;
        
        int[][] visited = new int[maps.length][maps[0].length];
        
        bfs(maps,visited);
        answer = visited[maps.length-1][maps[0].length-1];
        if(answer == 0){
            answer = -1;
        }
        return answer;
    }
    
    public void bfs(int[][] maps, int[][] visited){
        int x = 0;
        int y = 0;
        visited[x][y]=1;
        
        Queue<int[]> queue = new LinkedList<>();
        queue.add(new int[] {x,y});
        
        while(!queue.isEmpty()){
            int[] current=queue.remove();
            int cX = current[0];
            int cY = current[1];
            
            for(int i=0;i<4;i++){
                int nX = cX+dx[i];
                int nY = cY+dy[i];
                
                if(nX<0 || nX>maps.length-1 || nY<0 || nY>maps[0].length-1){
                    continue;
                }
                if(visited[nX][nY]==0 && maps[nX][nY]==1){
                    visited[nX][nY] = visited[cX][cY]+1;
                    queue.add(new int[] {nX,nY});
                }
            }
        }
        
    }
}

x,y =0

 

큐생성

 

while문

 

큐 제거한거 current

 

current에 dx,dy더해서 

nx,ny 만듬

 

continue

 

visited=0

maps=1

 

nxny = visited cx+cy +1

 

add(nx,ny)