728x90
반응형
2024.05.13기준 - 실버4
백준, BEAKJOON, BOJ, JAVA, 자바
풀이
이 문제는 로봇이 정사각형 격자 내에서 움직이는 시뮬레이션을 수행하는 문제입니다.
로봇은 격자 내의 경계를 벗어나지 않고 움직이도록 명령을 받습니다.
배열 dx, dy로 이동하는 좌표를 설정해 인덱스 값을 동, 서, 남, 북으로 정하여 풀어봤습니다.
로봇의 초기 위치는 (0, 0) 부터 시작합니다.
테스트 케이스 개수만큼 반복문이 돌아갑니다.
- MOVE 명령어가 들어오면 지금 바라보는 방향으로 x와 y좌표를 n만큼 이동합니다.
- TRUN 명령어가 들어오면 n이 0인지 1인지 분류해 현재 바라보고 있는 방향 dir을 업데이트 합니다.
- check 함수를 이용해 로봇이 격자 밖으로 나가지 않도록 반복문마다 확인을 해줍니다.
- check 함수를 통해 로봇이 격자를 벗어나면 -1를 입력하고 반복문을 멈춥니다.
이 문제는 시뮬레이션을 수행하여 풀이를 해봤습니다.
코드
import java.io.*;
import java.util.*;
public class Main {
static int len; // 한 변의 길이
static int[] dx = {1, 0, -1, 0}; // 동서남북 x좌표
static int[] dy = {0, 1, 0, -1}; // 동서남북 y좌표
static int dir = 0; // 동, 북, 서, 남
static int x = 0, y = 0; // 로봇의 초기 위치 (0, 0)
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
StringTokenizer st = new StringTokenizer(br.readLine());
len = Integer.parseInt(st.nextToken()); // 한 변의 길이
int t = Integer.parseInt(st.nextToken()); // 테스트 케이스 개수
while (t-- > 0) {
st = new StringTokenizer(br.readLine());
char c = st.nextToken().charAt(0);
int n = Integer.parseInt(st.nextToken());
if (c == 'M') { // MOVE 명령어
while (n-- > 0) { // n번 이동
x += dx[dir]; // 현재 방향에 따라 x좌표 업데이트
y += dy[dir]; // 현재 방향에 따라 y좌표 업데이트
}
} else if (n == 0) { // TURN 왼쪽으로 90도 명령어
dir++; // 시계방향으로 방향 변경
if (dir == 4) {
dir = 0;
}
} else { // TURN 오른쪽으로 90도 명령어
dir--; // 반시계방향으로 방향 변경
if (dir == -1) {
dir = 3;
}
}
// 로봇이 격자의 경계를 벗어나면 유효하지 않은 명령어이므로 체크
if (!check(x, y)) {
sb.append(-1);
break;
}
}
bw.write(sb.length() == 0 ? sb.append(x).append(" ").append(y).toString() : sb.toString());
bw.flush();
bw.close();
br.close();
}
// 로봇의 위치가 격자의 범위 내에 있는지 확인하는 메서드
private static boolean check (int x, int y) {
return x >= 0 && y >= 0 && x < len && y < len;
}
}
728x90
반응형
'코딩테스트 일기 (BAEKJOON)' 카테고리의 다른 글
BAEKJOON / 백준 - JAVA 7572번 간지(干支) (0) | 2024.05.18 |
---|---|
BAEKJOON / 백준 - JAVA 31825번 알파벳과 쿼리 (Easy) (0) | 2024.05.16 |
BAEKJOON / 백준 - JAVA 31712번 핑크빈 레이드 (0) | 2024.05.11 |
BAEKJOON / 백준 - JAVA 14940번 쉬운 최단거리 (0) | 2024.05.10 |
BAEKJOON / 백준 - JAVA 12871번 무한 문자열 (0) | 2024.05.10 |