[Python] 백준 13567번 : 로봇

hjeu·2025년 1월 5일

백준

목록 보기
13/48

💡문제

백준 13567번 문제 링크

🍀풀이

M, n = map(int, input().split())
commands = [input().split() for _ in range(n)]

x, y, dir = 0, 0, 0	# dir은 동, 북, 서, 남 방향으로 0, 1, 2, 3

# 동, 북, 서, 남
dx = [1, 0, -1, 0]
dy = [0, 1, 0, -1]

for command in commands:
    if command[0] == "MOVE":
        a = int(command[1])
        nx = x + dx[dir] * a
        ny = y + dy[dir] * a

		# 명령어 열이 유효한지 확인
        if 0 <= nx <= M and 0 <= ny <= M:
            x, y = nx, ny
        else:
            print(-1)
            break
    
    elif command[0] == "TURN":
        d = int(command[1])
        # 왼쪽 회전
        if d == 0:
            dir = (dir + 1) % 4
        # 오른쪽 회전
        elif d == 1:
            dir = (dir - 1) % 4

else:
    print(x, y)

이런 유형의 문제 뭔가 좋다...

회전 하는 부분의 코드를 좀 설명하면 dir이 현재 방향인데 0 1 2 3으로 동 북 서 남을 나타내고, 왼쪽으로 회전 하면 북쪽이니까 +1을 하면 된다. 여기서 %4를 하는 이유는 남쪽 즉 3까지 갔을때 또 왼쪽 회전으로 +1을 하면 4가 되는데 4는 방향이 없음 그래서 0으로 되어야하니까 %4를 해서 1-3까지의 숫자만 나타내도록 한거다.


profile
나는야 개발왕이 될거야! (๑ •̀ω•́)۶

0개의 댓글