209. 로봇청소기
1) 어떤 전략(알고리즘)으로 해결?
2) 코딩 설명
<내 풀이>
from collections import deque
import sys
n, m = map(int, sys.stdin.readline().split())
r=[-1,0,1,0]
c=[0,1,0,-1]
ror, roc , rdir = map(int, sys.stdin.readline().split())
mapp = []
for i in range(n) :
mapp.append(list(map(int,sys.stdin.readline().strip().split())))
q=deque(); q.append((ror,roc,rdir))
cnt = 0
while q:
curr,curc,curdir = q.popleft()
if mapp[curr][curc]==0 :
mapp[curr][curc]=2
cnt+=1
for i in range(4) :
tmpr = curr+r[curdir-1-i]
tmpc = curc+c[curdir-1-i]
if 0<=tmpr<n and 0<=tmpc<m and mapp[tmpr][tmpc]==0:
if curdir-1-i<0:
tmpcurdir=curdir-1-i+4
else : tmpcurdir=curdir-i-1
mapp[tmpr][tmpc]=2
cnt+=1
q.append((tmpr, tmpc, tmpcurdir))
break
if i==3 :
backr = curr-r[curdir]
backc = curc-c[curdir]
if 0<=backr<n and 0<=backc<m and mapp[backr][backc]!=1:
q.append((backr, backc, curdir))
else :
print(cnt)
exit()
<반성 점>
- 각 상황에 따라서 방향이 달라지는데, 그떄마다의 왼쪽을 가리키게 하는 로직을 생각하고 짜는게 몹시 어려웠다.
<배운 점>
- 온전히 내 힘으로만 풀어서 뿌듯 ㅎㅎ
- 왼쪽 오른쪽으로 도는 거 어떻게 구현하는지 잘 암기해두고 써먹기 자유자재로