유형 : BFS

풀이 시간 : 30분

 

*최단거리 == BFS를 이용해 풀이하자!!*

*visted queue를 잊지 말자!!*

from collections import deque 

def solution(maps):
    answer = 0
    msize = len(maps)
    nsize = len(maps[0])
    queue = deque()
    visited = deque()
    
    #initialization
    queue.append([0, 0])
    visited.append([0, 0])
    #순회를 위한 dx, dy
    dx = [1, 0, 0, -1]
    dy = [0, 1, -1, 0]
    
    #bfs search
    while queue:
        [currx, curry] = queue.popleft()
        for x, y in zip(dx, dy):
            if currx + x < msize and currx + x >= 0 and curry + y < nsize and curry + y >= 0: 
                if maps[currx+x][curry+y] != 0 and [currx+x, curry+y] not in visited:
                    queue.append([currx+x, curry+y])
                    visited.append([currx+x, curry+y])
                    maps[currx+x][curry+y] += maps[currx][curry]

    if maps[msize-1][nsize-1] == 1:
        return -1
    else:
        return maps[msize-1][nsize-1]

 

시간 초과가 발생해서 최적화를 좀 해 보자. 

visited를 queue로 만드는 것이 아니라 true, false 배열로 만들어 보자. 

 

from collections import deque 

def solution(maps):
    answer = 0
    msize = len(maps)
    nsize = len(maps[0])
    queue = deque()
    visited = [[False for i in range(nsize)] for j in range(msize)]
    
    #initialization
    queue.append([0, 0])
    visited[0][0] = True
    
    #순회를 위한 dx, dy
    dx = [1, 0, 0, -1]
    dy = [0, 1, -1, 0]
    
    #bfs search
    while queue:
        [currx, curry] = queue.popleft()
        for x, y in zip(dx, dy):
            if currx + x < msize and currx + x >= 0 and curry + y < nsize and curry + y >= 0: 
                if maps[currx+x][curry+y] != 0 and visited[currx+x][curry+y] == False:
                    queue.append([currx+x, curry+y])
                    visited[currx+x][curry+y] = True
                    maps[currx+x][curry+y] += maps[currx][curry]

    if maps[msize-1][nsize-1] == 1:
        return -1
    else:
        return maps[msize-1][nsize-1]

 

시간 초과 없이 해결되었다. 

 

<참고한 >

'프로그래머스 > Lv. 2' 카테고리의 다른 글

18. 입국심사 ★★  (0) 2024.07.19
17. 조이스틱 ★★ - 보류  (0) 2024.07.19
15. 타겟 넘버 ★(DFS)  (0) 2024.07.18
14. 카펫 (완전 탐색)  (0) 2024.07.18
13. 소수 찾기 (완전 탐색)  (1) 2024.07.18
복사했습니다!