문제 조건


input

output

문제 해석


코드


def solution(m, n, puddles):
		# 좌표 초기화
		# [0 * 행의 개수(n)] * 열의 개수(m)
    dp = [[0] * n for _ in range(m)]

    # 시작점 1로 초기화
    dp[0][0] = 1
    
    # 웅덩이 탐색의 효율을 고려해, set 생성
    puddle_set = set()
    
    for (i, j) in puddles:
        puddle_set.add((i, j))
    
    # m * n만큼 반복
    for i in range(m):
        for j in range(n):
            
            # 웅덩이    
            if (i+1, j+1) in puddle_set:
                continue
            
            # 경계 조건 1: (0,0)
            if i < 1 and j < 1:
                continue
                
            # 경계 조건 2: 1열일 경우, 오른쪽에서 오는 이전 경로 사용 불가  
            elif i < 1: 
                dp[i][j] = dp[i][j-1]
            
            # 경계 조건 3: 1행일 경우, 아래에서 오는 이전 경로 사용 불가
            elif j < 1:
                dp[i][j] = dp[i-1][j]
            
            # 모든 조건에 해당하지 않은 경우, 모든 경로 사용 가능
            else:
                dp[i][j] = dp[i-1][j] + dp[i][j-1]

    return dp[m-1][n-1] % 1000000007