[프로그래머스|JAVA] 게임 맵 최단거리 | ↔️ BFS 활용 | Queue 활용

2025. 8. 25. 14:34·💻코딩/💡Programmers
728x90
반응형

[문제 링크]

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

[문제]

 

 


 

📍 [코드]

import java.util.*;

class Solution {
    public int solution(int[][] maps) {
        int n = maps.length;       // 행
        int m = maps[0].length;    // 열
        
        // 방향 배열 (상, 하, 좌, 우)
        int[] dx = {0, 0, -1, 1};
        int[] dy = {-1, 1, 0, 0};
        
        Queue<int[]> queue = new LinkedList<>();
        queue.offer(new int[]{0, 0}); // 시작점
       
        while (!queue.isEmpty()) {
            int[] cur = queue.poll();
            int x = cur[0];
            int y = cur[1];
            
            // 네 방향 탐색
            for (int i = 0; i < 4; i++) {
                int nx = x + dx[i];
                int ny = y + dy[i];
                
                // 범위 밖이면 패스
                if (nx < 0 || ny < 0 || nx >= n || ny >= m) continue;
                // 벽이거나 이미 방문한 곳이면 패스
                if (maps[nx][ny] != 1) continue;
                
                // 거리 갱신 = 현재 위치 + 1
                maps[nx][ny] = maps[x][y] + 1;
                queue.offer(new int[]{nx, ny});
            }
        }
        
        // 도착점에 저장된 값이 최단거리
        return maps[n-1][m-1] == 1 ? -1 : maps[n-1][m-1];
    }
}

 

💡 접근법

  • 큐를 활용하여 탐색할 위치가 남아있는 동안 반복
  • 시작점 (0,0)을 기준으로 네 방향을 탐색하며
    • 범위 밖이거나 방문한 곳이면 continue를 주어 무시함
    • 범위 내에 방문하지 않은 곳이라면 지금까지 걸린 거리를 저장하고
    • 처음 maps[0][0] = 1→ 이후 계속 누적
  • 최종적으로 maps[n-1][m-1]에 최단 거리가 저장됨
    • 여전히 1이면 방문 못했다는 뜻 → 1

 

✅ 최단거리를 구하는 문제이므로 BFS 활용

✅ BFS 이므로 Queue 활용

 

 


 

💬 마무리

아직도 BFS / DFS 문제는 낯설고 어려운 것 같다... 온전히 혼자만의 힘으로 구현해내고 싶은데 아쉽다.
최단거리 = BFS = Queue 까지는 이제 알겠다.

 

 

 

 

728x90
반응형

'💻코딩 > 💡Programmers' 카테고리의 다른 글

[프로그래머스|JAVA] 콜라츠 추측 |💡 타입 오버플로우 문제 해결 (long)  (0) 2025.08.25
[프로그래머스|JAVA] 더 맵게 | 💡 우선순위 큐 활용 | Min Heap  (6) 2025.08.25
[프로그래머스|JAVA] 타겟 넘버 | ↕️ DFS 활용 | 간결 코드  (4) 2025.08.24
[프로그래머스|JAVA] 네트워크 | ↕️ DFS (깊이 우선 탐색) | 재귀적 방식  (0) 2025.08.24
[프로그래머스|JAVA] 제일 작은 수 제거하기 | 3️⃣가지 풀이법 | stream 및 예외 먼저 처리 등 💬  (0) 2025.08.24
'💻코딩/💡Programmers' 카테고리의 다른 글
  • [프로그래머스|JAVA] 콜라츠 추측 |💡 타입 오버플로우 문제 해결 (long)
  • [프로그래머스|JAVA] 더 맵게 | 💡 우선순위 큐 활용 | Min Heap
  • [프로그래머스|JAVA] 타겟 넘버 | ↕️ DFS 활용 | 간결 코드
  • [프로그래머스|JAVA] 네트워크 | ↕️ DFS (깊이 우선 탐색) | 재귀적 방식
망꼬누나
망꼬누나
공부한 내용을 정리하는 공간입니다.
  • 망꼬누나
    망꼬누나의 개발 공부
    망꼬누나
  • 전체
    오늘
    어제
    • 분류 전체보기 (165)
      • ℹ️ 정보 및 실습 (19)
        • ☑️ Git & GitHub (8)
        • ☑️ 프로젝트 (6)
        • ☑️ 회고 및 후기 (5)
      • 🛠 CS (1)
      • 💻코딩 (88)
        • 💡Baekjoon (17)
        • 💡Programmers (71)
      • ✏️공부 (48)
        • 💡OS (1)
        • 💡Network (6)
        • 💡SpringBoot (9)
        • 💡JAVA (21)
        • 💡SQL (1)
        • 💡DB (2)
        • ☁️ Cloud (4)
        • 💡알고리즘 (4)
      • 📌 자격증 (6)
        • 📝정보처리기사 (3)
        • 📝SQLD (3)
  • 블로그 메뉴

    • 홈
    • github
  • 나의 GitHub Contribution 그래프
    Loading data ...
  • 인기 글

  • 태그

    GIT
    동시성제어
    baekjoon
    AWS
    프로그래머스
    백엔드
    알고리즘
    자료구조
    프로그래머스 #JAVA
    자바
    github
    Set
    S3
    map
    데브코스
    트랜잭션
    코딩테스트
    Stream
    네트워크
    Java
  • 최근 댓글

  • 최근 글

  • 250x250
    반응형
  • hELLO· Designed By정상우.v4.10.5
망꼬누나
[프로그래머스|JAVA] 게임 맵 최단거리 | ↔️ BFS 활용 | Queue 활용
상단으로

티스토리툴바