반응형
먼저 청소한 구역은 벽이랑 구분하기 위해서 2로 색칠한다.
그 다음 2번처럼 작동하기 위해선 네 방향 모두 왼쪽으로 회전해서 0인 구역이 있을 경우 그 위치로 이동해서 청소를 한다. # (d+3)%4를 할 경우 현재 바라보고 있는 방향의 왼쪽 방향으로 바뀐다.
만약 네 방향 모두 청소할 구역이 없을때 방향을 유지한채 후진한다.
후진했을 경우 벽면이 있을때(1일때)는 cnt를 출력하고 종료하고 청소를 한 구역일 때는 다시 2번으로 가서 네 방향 회전을 시작한다.
반복문이 많다보니 pypy로 제출했다.
import sys,math
input = sys.stdin.readline
from collections import deque
n,m = map(int,input().split())
r,c,d = map(int,input().split())
ary = [list(map(int,input().split())) for _ in range(n)]
dy = [0,1,0,-1]
dx = [-1,0,1,0]
ary[r][c]=2
cnt=1
while 1:
clean=False
for i in range(4):
row=r+dx[(d+3)%4]
col=c+dy[(d+3)%4]
d = (d+3)%4
if 0<=row<n and 0<=col<m and ary[row][col]==0:
ary[row][col]=2
cnt+=1
clean=True
r=row
c=col
break
if not clean:
r-=dx[d]
c-=dy[d]
if ary[r][c]==1:
print(cnt)
break
반응형
'Algorithm > Baekjoon' 카테고리의 다른 글
15990번 파이썬 (0) | 2022.03.31 |
---|---|
11052번 파이썬 (0) | 2022.03.30 |
2573번 파이썬 (0) | 2022.03.28 |
2468번 파이썬 (0) | 2022.03.27 |
2579번 파이썬 (0) | 2022.03.26 |