🌞Algorithm/🔥Baekjoon

[Baekjoon] 13567_로봇

뿌야._. 2025. 2. 17. 15:07
문제(출처: https://www.acmicpc.net/problem/13567)

< 로봇 >

 

문제 풀이 

 

TURN 
0 : 왼쪽으로 90도 회전
1 : 오른쪽으로 90도 회전

MOVE
d : d만큼 이동

영역 밖으로 벗어나면 명령어 열이 유효하지 않으므로 -1 출력
명령어 열이 유효하다면 로봇의 위치 출력

 

 

my solution (Java)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class _13567_ { // 로봇

	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(bf.readLine());
        
		int M = Integer.parseInt(st.nextToken());
		int n = Integer.parseInt(st.nextToken());
        
		int dx[] = { -1, 0, 1, 0 };
		int dy[] = { 0, 1, 0, -1 };
        
		int x = M, y = 0, dir = 1;
		boolean flag = false;
        
		for (int i = 0; i < n; i++) {
			st = new StringTokenizer(bf.readLine());
            
			String cmd = st.nextToken();
			int d = Integer.parseInt(st.nextToken());
            
			if (cmd.equals("TURN")) {
				if (d == 0) {
					dir -= 1;
					if (dir < 0) {
						dir = 3;
					}
				} else {
					dir += 1;
					if (dir > 3) {
						dir = 0;
					}
				}
			} else {
				if (x + (dx[dir] * d) >= 0 && x + (dx[dir] * d) <= M && y + (dy[dir] * d) >= 0
						&& y + (dy[dir] * d) <= M) {
					x += dx[dir] * d;
					y += dy[dir] * d;
				} else {
					flag = true;
					break;
				}
			}
		}
        
		if (flag) {
			System.out.println(-1);
		} else {
			x = M - x;
			System.out.println(y + " " + x);
		}
	}
}

 

변수)
M : 정사각형 S 한 변의 길이
n : 로봇이 수행할 명령어 수
dx, dy : 방향
x, y, dir : 로봇의 위치와 방향
flag : 명령어 열 유효 여부
cmd, d : 명령어

 

정사각형 S 한 변의 길이 M과 로봇이 수행할 명령어 수 n을 입력받는다. 로봇의 시작 좌표를 (M,0), 방향을 동쪽 방향으로 초기화한다. 명령어 수(n)만큼 명령어를 입력받으며 다음 과정을 반복한다.

 

1) 명령어가 "TURN"이라면

1-1) 0이라면 왼쪽으로 90도 회전

1-2) 1이라면 오른쪽으로 90도 회전

2) 명령어가 "MOVE"라면

2-1) 로봇이 향하고 있는 방향으로 d만큼 움직여 영역 안이라면 이동

2-2) 로봇이 영역 밖으로 나간다면 명령어 열이 유효하지 않으므로 종료

 

명령어 열이 유효하지 않으면 -1 출력, 명령어 열이 유효한다면 로봇의 위치를 출력한다.



 

'🌞Algorithm > 🔥Baekjoon' 카테고리의 다른 글

[Baekjoon] 4446_ROT13  (0) 2025.02.19
[Baekjoon] 15235_Olympiad Pizza  (1) 2025.02.18
[Baekjoon] 15044_Fase  (0) 2025.02.14
[Baekjoon] 15081_Is Everybody Appy?  (0) 2025.02.13
[Baekjoon] 4408_Election  (0) 2025.02.12