<내 코드>
import collections
# 북, 동, 남, 서
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]
def change(d):
if d == 0: # 북 -> 서
return 3
elif d == 1: # 동 -> 북
return 0
elif d == 2: # 남 -> 동
return 1
elif d == 3: # 서 -> 동
return 2
def search(x, y, d):
cnt = 1
q = collections.deque([[x, y, d]])
route[x][y] = 2
while q:
x, y, d = q.popleft()
nd = d
for i in range(4):
# 왼쪽 영역 탐색
nd = change(nd)
nx = x + dx[nd]
ny = y + dy[nd]
# a
if 0 <= nx < N and 0 <= ny < M and route[nx][ny] == 0:
cnt += 1
route[nx][ny] = 2
q.append([nx, ny, nd])
break
# c
elif i == 3:
if d == 0:
x += 1
elif d == 1:
y -= 1
elif d == 2:
x -= 1
elif d == 3:
y += 1
q.append([x, y, d])
# d
if route[x][y] == 1:
return cnt
N, M = map(int, input().split())
r, c, d = map(int, input().split())
route = [list(map(int, input().split())) for _ in range(N)]
print(search(r, c, d))
-
방향을 북, 동, 남, 서 방향으로 바꿔줘야 한다
-
벽인지, 빈칸인지를 잘 구별해주어야 한다
-
후진을 할 방향을 잘 선택해주면 된다
반응형
'알고리즘 문제풀기 > 백준 - Python' 카테고리의 다른 글
[백준 2798] 블랙잭 - Python (브루트포스) (0) | 2020.10.03 |
---|---|
[백준 13458] 시험 감독 - Python (수학) (0) | 2020.09.23 |
[백준 14502] 연구소 - Python (브루트포스, BFS) (0) | 2020.09.22 |
[백준 14499] 주사위 굴리기 - Python (구현) (0) | 2020.09.22 |
[백준 1316] 그룹 단어 체커 - Python (문자열) (0) | 2020.09.10 |