코딩문제풀이/프로그래머스

[Python] 등굣길

코딩하는 포메라니안 2021. 8. 31. 16:48

1. 문제

 

 

2. 풀이 과정

방법 1) 필요한 부분만 보고 count

def solution(m, n, puddles):
    answer = 0
    arr = [[0]*(m) for _ in range(n)]
    
    #웅덩이는 -1로 표기
    if puddles != [[]]:
        for x, y in puddles:
            arr[y-1][x-1] = -1
    
    q = set() #중복 제거
    q.add((0, 0))
    arr[0][0] = 1
    while q:
        temp = set()
        for a, b in q:
            if a == n-1 and b == m-1:
                return arr[a][b]%1000000007
            #하
            na = a + 1
            if na < n and arr[na][b] != -1:
                arr[na][b] += arr[a][b]
                temp.add((na, b))
            #우
            nb = b + 1
            if nb < m and arr[a][nb] != -1:
                arr[a][nb] += arr[a][b]
                temp.add((a, nb))
        q = temp
    
    return answer%1000000007

 

방법 2) 전체를 차례대로 돌면서 count, 더 효율적인 코드

def solution(m, n, puddles):
    arr = [[0]*(m) for _ in range(n)]
    
    if puddles != [[]]:
        for x, y in puddles:
            arr[y-1][x-1] = -1
            
    for i in range(n):
        for j in range(m):
            if i==j==0 :
                arr[i][j] = 1 #시작
            elif arr[i][j] == -1: #웅덩이면 0으로 처리 => 다음 칸들의 더하기에 영향X
                arr[i][j] = 0
            else:
                #위에서 더하기
                if i > 0:
                    arr[i][j] += arr[i-1][j]
                #왼쪽에서 더하기
                if j > 0:
                    arr[i][j] += arr[i][j-1]

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

'코딩문제풀이 > 프로그래머스' 카테고리의 다른 글

[Python] 도둑질  (0) 2021.09.01
[Python] 여행경로  (0) 2021.08.31
[Python] N으로 표현  (0) 2021.08.30
[Python] 단속카메라  (0) 2021.08.30
[Python] 섬 연결하기  (0) 2021.08.30