본문 바로가기
알고리즘/구현

[백준][Python] 14503번 로봇 청소기

by 임짠짠 2023. 4. 4.
반응형
 

14503번: 로봇 청소기

첫째 줄에 방의 크기 $N$과 $M$이 입력된다. $(3 \le N, M \le 50)$  둘째 줄에 처음에 로봇 청소기가 있는 칸의 좌표 $(r, c)$와 처음에 로봇 청소기가 바라보는 방향 $d$가 입력된다. $d$가 $0$인 경우 북쪽

www.acmicpc.net

 

코드

n,m = map(int,input().split())
r,c,d = map(int,input().split())
graph = []

back_x = [1,0,-1,0]
back_y = [0,-1,0,1] # 북,동,남,서 순서대로 뒤쪽 방향
front_x = [-1,0,1,0]
front_y = [0,1,0,-1] 
dir = [0,1,2,3]
def check(a,b):
   for i in range(4):
        if graph[a+back_x[i]][b+back_y[i]] == 0:
            return True
   return False

for i in range(n):
    n_list = list(map(int,input().split()))
    graph.append(n_list)
cnt = 0

while True:
   if graph[r][c] == 0:
      graph[r][c] = 2
      cnt += 1
   if check(r,c):  # 주변 4칸 중 청소되지 않은 빈 칸이 있는 경우
      d = dir[d-1]
      if graph[r+front_x[d]][c+front_y[d]] == 0:
         r += front_x[d]
         c += front_y[d]
   else: 	 # 주변 4칸 중 청소되지 않은 빈 칸이 있는 경우
      if graph[r+back_x[d]][c+back_y[d]] != 1:
         r += back_x[d]
         c += back_y[d]
      else: break
      
print(cnt)
반응형

댓글