Algorithm

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

yerinpark 2023. 6. 19. 21:04

https://school.programmers.co.kr/learn/courses/30/lessons/1844?language=java

 

프로그래머스

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

programmers.co.kr

 

BFS 구현 시 LinkedList vs. ArrayDeque

참고한 블로그

https://tecoble.techcourse.co.kr/post/2021-05-10-stack-vs-deque/

 

Java 의 Stack 대신 Deque

🤹‍♀️ 자바에서 자료구조 Stack 을 대신해서 사용하는 Deque 에 대해서 알아보자. 이 글은 기능을 사용하는 방식이 아닌 ‘왜 Stack 대신 Deque 를 사용해야 하는가?‘에 대해서 설명한다. Stack 후

tecoble.techcourse.co.kr

 

DFS vs. BFS 선택

https://cookiee.tistory.com/629

 

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

BFS 최단 경로를 찾는 문제에서는 도착점에 도달한 순간 종료되는 BFS를 이용한다. DFS는 모든 경로를 탐색하기 때문에 적합하지 않다. [그래프 탐색] BFS / DFS [그래프 탐색] BFS / DFS BFS(Breadth-First Sear

cookiee.tistory.com

import java.util.*;

class Solution {
    static int[][] visited;
    static int M;
    static int N;
    static int [] dx = {1, -1, 0, 0};
    static int [] dy = {0, 0, 1, -1};
    
    static boolean checkValid(int x, int y) {
        if(x < 0 || x >= M || y < 0 || y >= N) return false;
        return true;
    }

    static void BFS(int[][] maps) {
        Queue<int[]> que = new ArrayDeque<int[]>();
        
        que.add(new int[]{0, 0});
        visited[0][0] = 1;
        
        while(!que.isEmpty()) {
            int[] now = que.remove();
            int y = now[0];
            int x = now[1];
            
            for(int i = 0; i < 4; i++) {
                int nx = x + dx[i];
                int ny = y + dy[i];

                if(!checkValid(ny, nx)) {
                	continue;	
                }
                if(visited[ny][nx] == 0 && maps[ny][nx] == 1) {
                    visited[ny][nx] = visited[y][x] + 1;
                    que.add(new int[]{ny, nx});
                }
                    
            }
        }
    }
    
    public static int solution(int[][] maps) {
        int answer = 0;
        
        M = maps.length;
        N = maps[0].length;
        visited = new int[M][N];
            
        BFS(maps);        
        answer = visited[M-1][N-1] == 0 ? -1 : visited[M-1][N-1];        
        
        return answer;
    }
}

'Algorithm' 카테고리의 다른 글

파일명 정렬  (0) 2023.08.03
[프로그래머스] 방금 그 곡 Java  (0) 2023.08.01
[프로그래머스] 캐시  (0) 2023.07.18
[프로그래머스] Java 요격 시스템  (0) 2023.06.30
[프로그래머스] 완주하지 못한 선수 Java  (0) 2023.06.20