<aside> 💡 구현/시뮬레이션
</aside>
Memory 31256KB Time 40ms Code Length 801B
grid = []
opp_d = [2,3,0,1]
dx = [-1,0,1,0]
dy = [0,1,0,-1]
def clean(x,y,d):
while True:
if grid[x][y]==0:
grid[x][y]=2
if grid[x+1][y]!=0 and grid[x][y+1]!=0 and grid[x-1][y]!=0 and grid[x][y-1]!=0:
if grid[x+dx[opp_d[d]]][y+dy[opp_d[d]]]==2:
x+=dx[opp_d[d]]
y+=dy[opp_d[d]]
else:
break
else:
if d==0:d=3
else: d-=1
if grid[x+dx[d]][y+dy[d]]==0:
grid[x+dx[d]][y+dy[d]]=2
x+=dx[d]
y+=dy[d]
N,M = map(int,input().split())
x,y,d = map(int,input().split())
for _ in range(N):
grid.append(list(map(int,input().split())))
clean(x,y,d)
cnt = 0
for line in grid:
cnt+=line.count(2)
print(cnt)
이 코드는 로봇 청소기의 작동 원리를 나타낸 것이다.
먼저, grid
는 로봇 청소기가 청소할 공간을 나타내며, opp_d
, dx
, dy
는 로봇 청소기의 방향을 조절하는데 사용된다.
clean(x,y,d)
함수는 로봇 청소기가 청소를 수행하는 기능을 한다. 이 함수는 로봇 청소기가 현재 위치에서 청소를 하고, 그 다음으로 청소할 위치를 결정한다.
로봇 청소기는 현재 위치에서 사방이 모두 청소가 되어있거나 벽인 경우에는 바라보는 방향을 유지한 채로 한 칸 후진한다. 그리고 후진한 위치가 벽이 아니면 청소를 계속하고, 벽이면 작동을 멈춘다.
사방 중 청소하지 않은 공간이 있다면, 현재 바라보는 방향을 기준으로 왼쪽 방향부터 탐색하여 청소를 진행한다.
마지막으로, 로봇 청소기가 청소한 칸의 개수를 세어 출력한다. 이를 위해 grid
를 순회하며 청소한 칸(값이 2인 칸)의 개수를 센다.