Koala - 13기/코딩테스트 준비 스터디

[백준/Python] #13567 로봇

dudcks 2024. 1. 27. 13:45

문제

 

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

 

13567번: 로봇

입력은 표준 입력으로부터 받는다. 첫 줄에는 두 정수 M과 n (1 ≤ M ≤ 1,000, 1 ≤ n ≤ 1,000)이 주어진다. M은 정사각형 S의 한 변의 길이, 즉 오른쪽 맨 위의 좌표는 (M, M)이 된다. n은 로봇이 수행할

www.acmicpc.net


Algorithm

n개의 명령어 이후에 로봇의 위치를 출력하는 문제이다. 만약 로봇이 구역을 벗어난다면 -1을 출력하도록 구성해야 한다.

로봇이 구역을 한번이라도 벗어난다면 -1을 출력해야 하므로 명령어가 입력될때마다 현재 위치를 확인하여 판단해주어야 하므로 flag변수를 이용하여 판단하였다.

로봇이 MOVE명령어를 입력받으면 해당 칸수만큼 현재 바라보고 있는 방향으로 이동해야 하므로 현재 이동방향을 담을 변수인 state를 이용하여 현재 방향이 무엇인지 나타내도록 하였고, dx dy를 통해 state의 값에 따라서 방향을 설정하였다.

이제 반복문을 통해 명령어를 입력받으면서 MOVE면 이동, TURN이면 state를 변경하도록 설정하고 마지막에 로봇의 위치를 판단하여 나갔는지, 안에 있는지를 판단하면 된다.


 

 

Code

input = __import__('sys').stdin.readline

m,n = map(int,input().split())
x=0
y=0
dx = [1,0,-1,0]
dy = [0,-1,0,1]
state = 0
flag = True
for i in range(n):
    a,b = map(str, input().split())
    if a == "MOVE":
        x += int(b) * dx[state]
        y += int(b) * dy[state]
    else:
        if int(b) == 1:
            state = (state+1)%4
        else:
            state -= 1
            if state < 0:
                state = 3

    if x < 0 or y < 0 or x >= m or y >= m:
        flag = False

if flag == False:
    print(-1)
else:
    print(x,y)