🐣 로봇청소기
1. 문제 링크
2. 코드
Python
40ms
31256KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import sys
# d = [0, 1, 2, 3] # 북, 동, 남, 서
input = sys.stdin.readline
# 북, 동, 남, 서
dv = [0, 1, 2, 3]
rv = [-1, 0, 1, 0]
cv = [0, 1, 0, -1]
graph, rst = [], 1
n, m = map(int, input().split())
r, c, d = map(int, input().split())
for _ in range(n):
graph.append(list(map(int, input().split())))
graph[r][c] = 2 # 시작 위치 청소
'''
0: 청소 x
1: 벽
2: 청소 o
'''
while True:
flag = 1
for i in range(4):
d = (d + 3) % 4
nr, nc = r + rv[d], c + cv[d]
if 0 <= nr < n and 0 <= nc < m: # 범위 벗어나는지 체크
if graph[nr][nc] == 0:
r, c = nr, nc # 이동
graph[nr][nc] = 2 # 청소
rst += 1
flag = 0
break
if flag: # 연속 네 번 실행
nr, nc = r + rv[(d + 2) % 4], c + cv[(d + 2) % 4]
if 0 <= nr < n and 0 <= nc < m and graph[nr][nc] != 1:
r, c = nr, nc
if graph[nr][nc] == 0:
rst += 1
graph[nr][nc] = 2
else:
break
print(rst)
3. 해설
- dfs
This post is licensed under CC BY 4.0 by the author.