오늘은 여기까지
[백준] 로봇 - 자바 Java 본문
https://www.acmicpc.net/problem/13567
아래와 같이 영역의 넓이, 명령어 개수, 명령어가 주어지면 그 결과 로봇이 최종적으로 위치한 좌표를 출력하는 문제이다. 영역을 벗어났다면 -1을 출력한다.
이때 명령어가 MOVE인 경우는 함께 주어진 수만큼 현재 방향으로 이동한다. 명령어가 "TURN 0"이면 왼쪽 90도만큼 회전, "TURN 1"이면 오른쪽 90도 회전이다.
처음에 방향이 동쪽으로 고정이기 때문에, dx와 dy를 시계방향 순대로 동, 남, 서, 북으로 설정했다.
static int dir = 0; // 동남서북
static int[] dx = {1, 0, -1, 0}; // 동남서북
static int[] dy = {0, -1, 0, 1};
크게 알고리즘이 필요하지 않았고 구현을 열심히 하면 되는 문제였던거 같다.
그리고 현재 로봇의 방향을 뜻하는 dir의 값이 0부터 3까지의 값에 해당해야 하기 때문에 조건을 추가했다.
else if(cmd.equals("TURN") && num == 0) { // TURN && 0
dir--;
if(dir == -1) dir = 3;
} else { // TURN && 1
dir++;
if(dir == 4) dir = 0;
}
자바 코드 전체
더보기
import java.util.*;
import java.io.*;
public class Main
{
static int M, n;
static int x, y = 0; // 좌표
static int dir = 0; // 동남서북
static int[] dx = {1, 0, -1, 0}; // 동남서북
static int[] dy = {0, -1, 0, 1};
// 로봇 위치가 map 내 존재하는지 확인
public static boolean check(int x, int y) {
return x>=0 && y>= 0 && x < M && y < M;
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
M = Integer.parseInt(st.nextToken());
n = Integer.parseInt(st.nextToken());
while(n-- > 0) {
st = new StringTokenizer(br.readLine());
String cmd = st.nextToken();
int num = Integer.parseInt(st.nextToken());
if(cmd.equals("MOVE")) { // MOVE
while(num-- > 0) {
x += dx[dir];
y += dy[dir];
}
} else if(cmd.equals("TURN") && num == 0) { // TURN && 0
dir--;
if(dir == -1) dir = 3;
} else { // TURN && 1
dir++;
if(dir == 4) dir = 0;
}
if(!check(x, y)) {
System.out.print("-1");
break;
}
}
if(check(x, y)) System.out.print(x + " " + y);
}
}
'Problem Solving' 카테고리의 다른 글
[백준/2805] 나무 자르기 - 파이썬 Python (0) | 2024.09.24 |
---|---|
[백준] 선분 위의 점 - 자바 Java (0) | 2024.09.22 |
[백준] RGB거리 - 자바 Java (0) | 2024.09.15 |
[프로그래머스] 더 맵게 - 자바 Java (0) | 2024.07.30 |
[프로그래머스] 택배상자 - 자바 Java (0) | 2024.07.25 |