[알고리즘/백준] 14503번 : 로봇 청소기(python)

유현민·2022년 5월 21일
0

알고리즘

목록 보기
185/253
post-custom-banner

주어진 조건에 맞게 하나씩 구현하면 된다.

왼쪽이 비어있으면 그대로 for문을 종료시키고 진행함.

왼쪽 회전을 할 때 공식을 찾아봤는데 (d + 3)% 4 이런 공식이 있었다!! 이걸 활용해서 풀었다.

N, M = map(int, input().split())
r, c, d = map(int, input().split())
a = [list(map(int, input().split())) for _ in range(N)]
visited = [[0] * M for _ in range(N)]

dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]

visited[r][c] = 1
cnt = 1

while True:
    flag = False
    for _ in range(4):
        nx = r + dx[(d + 3) % 4]
        ny = c + dy[(d + 3) % 4]
        d = (d + 3) % 4
        if N > nx >= 0 == a[nx][ny] and 0 <= ny < M:
            if not visited[nx][ny]:
                visited[nx][ny] = 1
                cnt += 1
                r = nx
                c = ny
                flag = True
                break
    if not flag:
        if a[r - dx[d]][c - dy[d]]:
            print(cnt)
            break
        else:
            r, c = r - dx[d], c - dy[d]
profile
smilegate
post-custom-banner

0개의 댓글