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

 

프로그래머스

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

programmers.co.kr

 

간단한 bfs 문제이다.

상대 팀 진영에 ‘최대한 빨리’ 도착하는 것이 유리하다.

→ 최단거리 문제다. bfs를 통해서 최단 거리를 구할 수 있다.

주어진 데이터가 int [][] maps인데 0은 벽 1은 벽이 없는 자리를 나타낸다.

여기서 방문 가능한 점을 탐색하면서 bfs를 하면 된다.

또한 해당 맵에서 위치 값을 변경해 가면서 처리하면 별도의 방문 배열이 필요 없어진다.

import java.util.*;

class Solution {
    static int[] DR = {-1, 1, 0, 0}; // 상하좌우 기준
    static int[] DC = {0, 0, -1, 1};
    
    public int solution(int[][] maps) {
        
        int m = maps.length - 1;
        int n = maps[0].length - 1;
        
        Queue<int[]> q = new LinkedList<>();
        q.add(new int[]{0, 0}); // 시작점
        
        while (!q.isEmpty()) {
            int[] curr = q.poll();
            int r = curr[0];
            int c = curr[1];
            
            if (r == m && c == n) {
                return maps[r][c]; // 이미 도착지에 도달한 상황
            }
            
            for (int d = 0; d < 4; d++) {
                int nr = r + DR[d];
                int nc = c + DC[d];
                
                if (nr < 0 || nr > m || nc < 0 || nc > n) continue;
                if (maps[nr][nc] != 1) continue;
                
                maps[nr][nc] = maps[r][c] + 1;
                q.add(new int[]{nr, nc});
            }
        }
        
        return maps[m][n] == 1 ? -1 : maps[m][n];
    }
}

'Algorithm > Programmers' 카테고리의 다른 글

Programmers 12978 - 배달  (0) 2024.09.29
Programmers 159993 - 미로 탈출  (0) 2024.09.29
Programmers 43162 - 네트워크  (0) 2024.09.29
Programmers 42861 - 섬 연결하기  (0) 2024.09.28
Programmers 12981 - 영어 끝말잇기  (0) 2024.09.27

+ Recent posts