읽기 전
- 불필요한 코드나 잘못 작성된 내용에 대한 지적은 언제나 환영합니다.
- 개인적으로 배운 점을 정리한 글입니다.
문제 링크
문제 풀이
바로 풀릴 줄 알았는데 웅덩이가 각 경계선에 있는 경우 그 뒤로는 도달할 수 없음을 간과했다. 만약 시작점 바로 우측과 하단에 웅덩이가 있으면 최단 거리의 개수가 0이 될 수도 있음을 고려하자.
- 최단 거리를 기록할 2차원 배열을 생성한다.
- puddle의 원소마다 해당 자리에 INF를 넣어 갈 수 없음을 표기한다.
- 시작점으로부터 우측, 하단 경계선에 INF가 나오기 전까지 1로 바꾼다.
[1][1]
부터 시작하여 끝점까지 위와 좌측의 값을 더한다. 만약 위/좌측의 값이 INF이면 갈 수 없음을 의미하므로 0으로 간주한다.- 도착점인 우측 하단의 값을 리턴한다.
python 코드
def solution(m, n, puddles): board = [[0] * m for _ in range(n)] INF = float('inf') for c, r in puddles: board[r - 1][c - 1] = INF for i in range(1, n): if board[i][0] == INF: break board[i][0] = 1 for j in range(1, m): if board[0][j] == INF: break board[0][j] = 1 for i in range(1, n): for j in range(1, m): if board[i][j] == INF: continue a = board[i - 1][j] b = board[i][j - 1] if a == INF: a = 0 if b == INF: b = 0 board[i][j] = (a + b) % 1000000007 return board[-1][-1]
'Algorithms > Programmers' 카테고리의 다른 글
Programmers. 다리를 지나는 트럭 (0) | 2021.08.10 |
---|---|
Programmers. 도둑질 (0) | 2021.08.10 |
Programmers. 소수 찾기 (0) | 2021.08.10 |
Programmers. 큰 수 만들기 (0) | 2021.07.22 |
Programmers. 디스크 컨트롤러 (0) | 2021.07.22 |