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;
}