Search

Unique Paths

문제 설명 : 오른쪽, 아래 두 방향으로만 이동 가능할 때 제공된 좌표에 도달할 수 있는 방법이 몇가지인지 반환한다.
풀이 방법
처음에는 DFS로 탐색하면서, 전역변수에 카운트를 증가시키는 방향으로 진행했다.
이 방법은 조금만 목표 좌표가 멀어도 금방 시간 초과가 발생하였다.
결국에는, 일일히 탐색은 어렵다고 판단하고 Dynamic Programming(DP)를 사용해야 할 것 같았다.
이를 위해, 이전 좌표를 사용하여 현재 좌표를 구하는 점화식을 간단히 세웠고 이를 적용하였다.
시간복잡도 : O(MN)O(M * N)제공된 목표 좌표 m, n을 사용한 움직일 수 있는 면적만큼만 시간이 걸린다.
성공 코드
class Solution: point_info = {(1, 1): 1} def uniquePaths(self, m: int, n: int) -> int: self.result = 0 def path_count(x, y): if self.point_info.get((x, y)): return self.point_info[(x, y)] elif x == 1: self.point_info[(x, y)] = path_count(x, y - 1) elif y == 1: self.point_info[(x, y)] = path_count(x - 1, y) else: self.point_info[(x, y)] = path_count(x - 1, y) + path_count(x, y - 1) return self.point_info[(x, y)] return path_count(n, m)
Python
복사