

바라보는 방향을 유지한 채로 후진하는 것을 제대로 확인하지 못해서 계속 오답이 나왔다.
그렇게 어려운 문제는 아닌 것 같은데 왜 막상 풀면 잘 안 풀리는 건지..아직 연습이 많이 부족한 듯
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))
'Algorithm > [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 |