[프로그래머스] 등굣길 (DP)

2025. 6. 9. 22:12·Algorithm/Coding Test Records

문제 소개

오늘 풀었던 등굣길 - 프로그래머스 문제를 정리합니다.
이 문제는 격자 형태의 지도에서 특정 위치를 피해 최단경로의 개수를 구하는 DP 유형의 문제입니다.
핵심은 "오른쪽과 아래쪽으로만 이동", "물에 잠긴 지역은 지나갈 수 없음"이라는 조건입니다.

문제 링크: 등굣길 - 프로그래머스


문제 접근 방식

이 문제는 다음과 같은 방식으로 접근했습니다:

  1. 최단 경로의 개수를 구해야 하므로 DP 테이블 생성
  2. (1,1)부터 시작해서 오른쪽 또는 아래 방향으로 누적 경로 개수 계산
  3. puddle 좌표는 -1로 마킹한 뒤 0으로 처리, 즉 해당 위치는 갈 수 없음
  4. 각 칸은 위에서 온 경우 + 왼쪽에서 온 경우의 합으로 누적
  5. 최종 목적지 (n, m)에 도달하는 경로의 수가 정답

해결 과정 및 코드

핵심 아이디어

  1. board[y][x] 배열을 만들어 (1,1)부터 (n,m)까지 각 지점까지 올 수 있는 경우의 수를 누적
  2. 물에 잠긴 지점은 -1로 마킹한 뒤, DP 계산 중에는 0으로 만들어 경로에 포함되지 않게 처리
  3. 위쪽 (board[i-1][j])과 왼쪽 (board[i][j-1])에서 온 경로의 수를 더해 현재 위치의 값을 계산
  4. 모듈로 연산(% 1_000_000_007)을 통해 수가 커지는 것을 방지

코드

시간 복잡도 : O(NM)

import java.util.*;

class Solution {
    public int solution(int m, int n, int[][] puddles) {
        int [][] board = new int[n+1][m+1];  // 1-based index 사용 (board[y][x])
        
        // 물에 잠긴 지역은 -1로 표시
        for (int [] puddle : puddles) {
            board[puddle[1]][puddle[0]] = -1;
        }

        board[1][1] = 1; // 시작 위치는 경로 수 1로 초기화

        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= m; j++) {
                if (board[i][j] < 0) {
                    board[i][j] = 0;  // 물웅덩이는 경로 없음
                    continue;
                }
                // 윗 칸과 왼쪽 칸에서 온 경로 수를 더함
                board[i][j] += (board[i-1][j] + board[i][j-1]) % 1_000_000_007;
            }
        }

        return board[n][m];
    }
}

'Algorithm > Coding Test Records' 카테고리의 다른 글

[백준] 괄호 추가하기 (DFS)  (3) 2025.06.12
[프로그래머스] 사칙연산 (분할 정복 + DP)  (1) 2025.06.10
[프로그래머스] 정수 삼각형 (DFS+메모이제이션)  (0) 2025.06.08
[프로그래머스] 정수 삼각형 (DP)  (1) 2025.06.07
[프로그래머스] 모음사전 (수학)  (0) 2025.06.05
'Algorithm/Coding Test Records' 카테고리의 다른 글
  • [백준] 괄호 추가하기 (DFS)
  • [프로그래머스] 사칙연산 (분할 정복 + DP)
  • [프로그래머스] 정수 삼각형 (DFS+메모이제이션)
  • [프로그래머스] 정수 삼각형 (DP)
Celion
Celion
오늘도 평소처럼 화이팅!
  • Celion
    Orion Log
    Celion
  • 전체
    오늘
    어제
    • 전체 글 (144)
      • Uncompiled Thoughts (8)
        • 네이버 부스트캠프 10기 (5)
      • CS 기초부터 한 걸음씩 (34)
      • Code Odyssey (22)
      • Algorithm (77)
        • Coding Test Records (63)
      • Git (3)
      • reference (0)
  • 블로그 메뉴

    • 태그
    • 방명록
  • 태그

    java
    Level2
    알고리즘고득점kit
    코테
    Kotlin
    문법정리
    시뮬레이션
    프로그래머스
    백준
    greedy
    Level3
    boostcamp
  • 최근 글

  • 인기 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.4
Celion
[프로그래머스] 등굣길 (DP)
상단으로

티스토리툴바