커뮤니티
포인트
쿠폰
내 강의실
국비 신청 내역
증명서
계정
로그아웃
학습 질문
개발 일지
나의 활동
답변 완료
미로 탐색
[스킬업] 실무에 바로 쓰이는 알고리즘 by Python v0
3주차
북마크
장*은
댓글
1
추천
0
조회수
12
조회수
12
답변 완료

* 겪고 있는 문제 상황을 최대한 자세하게 작성해주세요.

* 문제 해결을 위해 어떤 시도를 해보았는지 구체적으로 함께 알려주세요.


미로 탐색 문제를 풀던 중에 이해가 되지 않은 부분이 있어서 질문 드립니다.

저는 visited라는 배열을 추가로 두고 방문한 적이 있으면 방문하지 않도록 처리를 하였습니다. 강의에서는 이중 for문으로 visited를 대체하는 것으로 이해해서 저도 이중 for문으로 대체를 하여 미로 탐색 문제를 풀었는데 계속 입력이 받도록 종료가 되지 않았습니다.


  1. 종료가 되지 않고 계속 입력 상태였던 이유가 궁금합니다.
  2. 이중 for문을 삭제하였고, 방문했던 것은 0으로 처리를 하였는데 결국 return된 값이 15가 아닌 0이 되는 이유가 궁금합니다. 또한 왜 이중 for문을 삭제해야하는지 잘모르겠습니다.
  3. maze[x][y] = 0 부분을 삭제하였더니 15로 출력이 되었습니다. 그렇다면 방문 처리 0부분은 어디서 해야하나요?





작성한 코드 및 에러 메세지

오류 발생 시, 작성한 코드 전체와 에러 메시지를 첨부해 주세요.

# visited로 해결
from collections import deque


n, m = map(int, input().split())
graph = [list(map(int, input().rstrip())) for _ in range(n)]
visited = [[0] * m for _ in range(n)]
dx = [-1,1,0,0]
dy = [0,0,-1,1]
count = 0


def bfs(x,y):
    visited[x][y] = 1
    q = deque()
    q.append((x,y))
    while q:
        x,y = q.popleft()
        for i in range(4):
            nx = x + dx[i]
            ny = y + dy[i]
            if nx <0 or ny <0 or nx >=n or ny>= m:
                continue
            if graph[nx][ny] == 1 and visited[nx][ny] ==0:
                q.append((nx,ny))
                visited[nx][ny] = 1
                graph[nx][ny] = graph[x][y] + 1


# 이중 for문 삭제, maze[x][y] 를 0으로 처리
import sys
from collections import deque

input = lambda: sys.stdin.readline().rstrip()


def maze_search(rows, cols, maze):
    dx = [-1, 1, 0, 0]
    dy = [0, 0, -1, 1]

    q = deque([(0, 0)])

    while q:
        x, y = q.popleft()
        for i in range(4):
            nx = dx[i] + x
            ny = dy[i] + y

            if nx < 0 or nx >= rows or ny < 0 or ny >= cols or maze[nx][ny] != 1:
                continue

            q.append((nx, ny))
            maze[nx][ny] = maze[x][y] + 1
            maze[x][y] = 0

    return maze[rows-1][cols-1]

n, m = map(int, input().split())
arr = [list(map(int, input())) for _ in range(n)]
print(maze_search(n, m, arr))

  

Tip 2) Ctrl+A(맥의 경우 Command+A) 단축키로 코드를 한 번에 선택할 수 있어요!



취소
 공유
취소
댓글 0
댓글 알림
나의얼굴