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

https://www.acmicpc.net/problem/14503

풀이

  • 주어지는 방향 인덱스 0, 1 ,2, 3은 각각 북, 동, 남, 서인데 로봇청소기가 회전하는 방향은 반대임을 주의 --> 회전할 때마다 d-=1로 처리하였다.
  • 사방이 청소한 바닥이거나 벽일 경우 후진을 시도해야 하므로 청소한 위치를 2로 변경해서 벽과 구분함. 뒤쪽이 1일 경우 루프 종료

코드

import sys
input = sys.stdin.readline
n, m = map(int, input().split())
y, x, d = map(int, input().split())
maps = [list(map(int, input().split())) for _ in range(n)]
maps[y][x] = 2
dx = [0, 1, 0, -1]
dy = [-1, 0, 1, 0]

cleaned = 1
turned = 0

while True:
    # 왼쪽으로 회전
    d -= 1
    if d<0: d=3

    # 2-a)
    nx = x + dx[d]
    ny = y + dy[d]
    if maps[ny][nx] == 0:
        x = nx
        y = ny
        maps[y][x] = 2
        cleaned += 1
        turned = 0
        continue
    else:
        turned+=1

    if turned==4:
        nx = x - dx[d]
        ny = y - dy[d]
        if maps[ny][nx] == 1:
            break
        else:
            x = nx
            y = ny
            turned=0
print(cleaned)

좋은 웹페이지 즐겨찾기