Skip to content

Latest commit

 

History

History

등굣길

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

문제 설명

계속되는 폭우로 일부 지역이 물에 잠겼습니다. 물에 잠기지 않은 지역을 통해 학교를 가려고 합니다. 집에서 학교까지 가는 길은 m x n 크기의 격자모양으로 나타낼 수 있습니다.

아래 그림은 m = 4, n = 3 인 경우입니다.

image

가장 왼쪽 위, 즉 집이 있는 곳의 좌표는 (1, 1)로 나타내고 가장 오른쪽 아래, 즉 학교가 있는 곳의 좌표는 (m, n)으로 나타냅니다.

격자의 크기 m, n과 물이 잠긴 지역의 좌표를 담은 2차원 배열 puddles이 매개변수로 주어집니다. 오른쪽과 아래쪽으로만 움직여 집에서 학교까지 갈 수 있는 최단경로의 개수를 1,000,000,007로 나눈 나머지를 return 하도록 solution 함수를 작성해주세요.

제한사항

격자의 크기 m, n은 1 이상 100 이하인 자연수입니다. m과 n이 모두 1인 경우는 입력으로 주어지지 않습니다. 물에 잠긴 지역은 0개 이상 10개 이하입니다. 집과 학교가 물에 잠긴 경우는 입력으로 주어지지 않습니다.

입출력 예

m n puddles return 4 3 [[2, 2]] 4 입출력 예 설명 image

나의 풀이

이번 문제는 어렸을 적 배운 경우의 수 단원에 길 찾기 문제를 코딩으로 푸는 문제였다. 그래프의 각 칸의 최단거리 경우의 수는 왼쪽칸과 위 쪽칸의 경우의 수의 합이다. 즉, 처음 부분부터 목표까지 dp 리스트를 만들어내는 다이나믹 프로그래밍에 적합한 문제였다. 다이나믹 프로그래밍으로 풀면 쉽게 풀리지만 한 가지 주의해야 할 점이 있다. 이차원 리스트로 그래프를 표현한 경우 물 웅덩이나 목표에 대해 문제에서 주어진 (x,y)로 접근하면 안 되고 (y,x)로 접근해야 한다는 점이다. 이를 무시하면 런타임 에러가 발생한다.

dfs나 bfs로도 풀어낼 수 있지만 문제 자체에 조금 더 직관적인 방법은 다이나믹 프로그래밍이라고 생각한다.