본문 바로가기
Programming/Programmers

[프로그래머스] 등굣길(Python)

by 데이터현 2021. 8. 12.

https://programmers.co.kr/learn/courses/30/lessons/42898

 

코딩테스트 연습 - 등굣길

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

programmers.co.kr

dp = [[0 for w in range(101)] for h in range(101)]
_map = [[0 for w in range(101)] for h in range(101)]  # 01
state = [[0 for w in range(101)] for h in range(101)]  # 012
dxdy = [[1, 0], [0, 1], [-1, 0], [0, -1]]

def solution(m, n, puddles):
    now = []
    now.append([1, 1])
    new = []
    M = 1000000007
    for x,y in puddles:
        _map[y][x]=1
    
    dp[1][1]=1
    while now:
        for x, y in now:
            for dx, dy in dxdy:
                nx = x+dx
                ny = y+dy
                if nx >= 1 and ny >= 1 and nx <= m and ny <= n and _map[ny][nx] == 0 and state[ny][nx] != 2:
                    dp[ny][nx] = (dp[ny][nx]+dp[y][x]) % M
                    if state[ny][nx] == 0:
                        state[ny][nx] = 1
                        new.append([nx, ny])

        for x, y in now:
            state[y][x] = 2
        now = new[:]
        new.clear()

    return dp[n][m]

댓글