[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)