https://www.acmicpc.net/problem/2178
BFS를 사용하여 풀었습니다.
큐의 길이를 재면서 BFS를 돌리는 방식으로 최소 블록 갯수를 구했고,
한번 방문한 부분은 숫자를 바꿔주는 것으로 다시 접근하지 않도록 처리했습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | import sys import collections dy = [-1, 0, 1, 0] dx = [0, 1, 0, -1] fastinput = lambda: sys.stdin.readline().rstrip() N, M = map(int,fastinput().split()) maze = [[int(x) for x in fastinput()] for _ in range(N)] qu = collections.deque() qu.append((0,0)) result = 1 while qu: quSize = len(qu) result += 1 for _ in range(quSize): cy, cx = qu.popleft() for i in range(4): ny = cy + dy[i] nx = cx + dx[i] if ny == N-1 and nx == M-1: print(result) exit(0) elif ny >= 0 and nx >= 0 and ny < N and nx < M and maze[ny][nx] == 1: maze[ny][nx] = 2 qu.append((ny, nx)) | cs |
'Study > 알고리즘' 카테고리의 다른 글
[2019 카카오 신입 공채 1차 코딩 테스트] 2. 실패율 - python (0) | 2019.03.15 |
---|---|
[2019 카카오 신입 공채 1차 코딩 테스트] 1. 오픈채팅방 - python (0) | 2019.03.13 |
[BOJ]15954 인형들 - python (0) | 2019.03.13 |
[BOJ]15953 상금 헌터 - python (0) | 2019.03.13 |
[BOJ]7576 토마토 - python (0) | 2019.03.13 |