문제
https://www.acmicpc.net/problem/13567
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)
'Koala - 13기 > 코딩테스트 준비 스터디' 카테고리의 다른 글
[백준/C++] 12856번: 평범한 배낭 (0) | 2024.01.28 |
---|---|
[백준/C++] 20057 마법사 상어와 토네이도 (0) | 2024.01.28 |
[백준/C++] 국회의원 선거 (0) | 2024.01.25 |
[백준/Python] 18405번 경쟁적 전염 (0) | 2024.01.25 |
[Baekjoon/C++] 3273번: 두 수의 합 (0) | 2024.01.24 |