PS
[백준] 13567번 로봇 (C++)
-minari-
2025. 1. 22. 22:04
https://www.acmicpc.net/problem/13567
문제 설명
(0,0)에서 동쪽을 향해 서있는 상태에서 n개의 명령어가 들어온다,
- TURN 0 : 왼쪽으로 90도 회전
- TURN 1 : 오른쪽으로 90도 회전
- MOVE d : d만큼 이동
n개의 명령어를 다 수행한 후에 좌표를 출력하면 된다. 만일 m*m 격자판을 벗어난다면 -1을 출력한다
주요 로직
1. 단순 구현이다
주의할 점은 왼쪽 상단이 (0,0)이 아니라는 왼쪽 하단이 (0,0)이라는 점이다
정답 코드
#include <bits/stdc++.h>
using namespace std;
string str;
bool flag = true;
int m,n,y,x,k,d,ans=-1;
int dy[4] = {-1,0,1,0}, dx[4] = {0,1,0,-1};
bool check(int y, int x){
return 0 <= y && y <= m && 0 <= x && x <= m;
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
cin >> m >> n;
y = m, x = 0, d=1;
for(int i=0; i<n; i++){
cin >> str >> k;
if(str == "MOVE"){
y = y + dy[d]*k;
x = x + dx[d]*k;
if(!check(y,x)) flag = false;
}else if(str == "TURN"){
if(k == 0){
d -= 1;
if(d < 0) d = 3;
}
else if(k == 1){
d += 1;
if(d >= 4) d = 0;
}
}
}
if(!flag) cout << "-1\n";
else cout << x << " " << m-y << "\n";
return 0;
}