문제(출처: 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 |