바라보는 방향을 유지한 채로 후진하는 것을 제대로 확인하지 못해서 계속 오답이 나왔다.
그렇게 어려운 문제는 아닌 것 같은데 왜 막상 풀면 잘 안 풀리는 건지..아직 연습이 많이 부족한 듯
from collections import deque
import sys
input = sys.stdin.readline
dx = [-1,0,1,0]
dy = [0,1,0,-1]
n, m = map(int,input().split())
r,c,d = map(int,input().split())
graph = []
visited = [[False for j in range(m)]for i in range(n)]
for i in range(n):
graph.append(list(map(int,input().split())))
def bfs(a,b,d):
queue = deque()
queue.append((a,b))
# 시작지점을 청소했다고 체크
visited[a][b] = True
cnt = 1
while queue:
x,y = queue.popleft()
# 인접한 칸 중에 청소할 수 있는 게 있는지 체크하는 플래그
flag = 0
for _ in range(4):
# 반시계방향으로 회전
d = (3+d)%4
nx = x+dx[d]
ny = y+dy[d]
# 인접한 칸이 그래프 범위 안에 있고
# 청소할 수 있는 칸이며 아직 방문하지 않았다면
if 0<=nx<n and 0<=ny<m and graph[nx][ny]==0:
if not visited[nx][ny]:
# 청소했다고 체크
cnt +=1
flag = 1
# 해당 칸을 큐에 넣음
queue.append((nx,ny))
visited[nx][ny] = True
# 청소를 마쳤으니 break
break
# 인접한 칸 중에 청소할 게 없다면
if flag ==0:
# 바라보는 방향 그대로 후진할 수 없다면
if graph[x-dx[d]][y-dy[d]]==1:
# 청소한 칸 수를 리턴
return cnt
# 후진할 수 있다면
else:
# 이동할 좌표를 후진한 칸으로 변경
# 그 칸에서 다시 bfs 수행
nx = x-dx[d]
ny = y-dy[d]
queue.append((nx,ny))
visited[nx][ny] = True
return cnt
print(bfs(r,c,d))
'[BOJ] - Python' 카테고리의 다른 글
[백준] 5014 : 스타트링크 python (0) | 2023.08.25 |
---|---|
[백준] 9205 : 맥주 마시면서 걸어가기 python (0) | 2023.08.24 |
[백준] 2468 : 안전 영역 python (0) | 2023.08.22 |
[백준] 1525 : 퍼즐 python (0) | 2023.08.19 |
[백준] 10451 : 순열 사이클 python (0) | 2023.08.19 |