[백준] 31404 - 아리스, 청소합니다! (Easy)

안우진·2024년 2월 23일
0

백준

목록 보기
7/21

[문제]


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

[풀이]


먼지가 있으면 규칙표 A, 없으면 규칙표 B를 따른다.
여기서 중요한 것이, 같은 곳에서 같은 방향으로 여러 번 이동할 수 있다는 것이다.
단, 먼지를 청소하지 못하고 무의미하게 사이클을 도는 것은 처리해줘야한다.

[코드]


import sys
r=sys.stdin.readline

dx = [0, 1, 0, -1]
dy = [-1, 0, 1, 0]
H,W=map(int,r().split())
R,C,D=map(int,r().split())

dust = [[1]*W for _ in range(H)]
visit = [[[0]*4 for _ in range(W)] for _ in range(H)]

A=[]
for _ in range(H):
    A.append(list(map(int,list(r().rstrip()))))

B=[]
for _ in range(H):
    B.append(list(map(int,list(r().rstrip()))))

ans=dummy=clear=0
while 1:
    
    if dust[R][C]:
        dust[R][C] = 0
        D = (D + A[R][C])%4
        clear+=1
        dummy=0
    else:
        D = (D + B[R][C])%4
        if visit[R][C][D] == clear:
            break
        visit[R][C][D] = clear
        dummy+=1
    
    R += dy[D]
    C += dx[D]
    ans+=1
    if not (0 <= R < H) or not (0 <= C < W):
        break

print(ans-dummy)

0개의 댓글