p_등굣길_42898

source school.programmers.co.kr/learn/course...
topics 600-알고리즘 & 코딩테스트
types 문제풀이
정답여부 성공

문제

최단거리개수의합
아래와 오른쪽으로만갈수있음

bfs를 이용해야겠다라는 생각을했다. 그리고 이미 방문한곳을 아예갈수 없는게 아니라 같은 스텝의 경우는 허용되기에 이부분을 어떻게 처리할지 고민이 깊었다.
근데 고민할 필요가없엇다 아래와 오른쪽으로만 갈 수 있다는 조건 이있었기에 각기 다른방향에서오는 최단거리를 고대로 합해주는 식으로 하면됐었다.
이때 주요포인트가 각자 다른 거리지만 한목적지를 향해서 오는 것에 대해서는 나중에 방문햇던 리스트목록에 set으로 넣어야한다는 것이다. 아니면 중복처리가 된다.


def solution(m, n, puddles):
    ways =[[0,1],[1,0]]
    visit =[[0]*m for _ in range(n)]
    q = {(0,0)}
    visit[0][0] = 1    
    
    while q and visit[n-1][m-1] == 0:
        tq = set([])
        for y,x in q:
            before = visit[y][x]
            for dy,dx in ways:
                ny = y+dy
                nx = x+dx
                if [nx+1,ny+1] in puddles:
                    continue
                if 0<=ny and 0<=nx and ny<n and nx<m:
                    visit[ny][nx] +=before
                    tq.add((ny,nx))
        q = tq
    return visit[n-1][m-1] % 1000000007