▼ Why ?
이전 문제 [안전지대]와 같은 구현 - 시뮬레이션 문제이고, 이번 문제는 이전 문제와 달리 실제로 개체를 움직이는 상황이 주어져 그 개체의 위치를 파악해야 한다는 점 때문에 풀어보았다.
▼ 청소 로봇
문제 정보
- n*n 크기의 이차원 배열 격자판 0행 0열이 청소 로봇의 시작위치입니다.

- 청소 로봇은 다음 규칙에 따라 이동합니다.
- 'U' 명령은 로봇이 위쪽으로 한 칸 이동합니다.
- 'R' 명령은 로봇이 오른쪽으로 한 칸 이동합니다.
- 'L' 명령은 로봇이 왼쪽으로 한 칸 이동합니다.
- 'D' 명령은 로봇이 아래쪽으로 한 칸 이동합니다.
- 만약 로봇이 명령을 수행할 경우 격자판 밖으로 나가는 경우라면 로봇은 해당 명령을 수행 하지 않고 무시합니다.
- 매개변수 n에 격자판 크기가 주어지고, moves에 청소 로봇에 명령을 내린 문자들이 차례대로 나열된 명령 문자열이 주어지면 청소 로봇이 최종적으로 멈춘 위치를 반환하는 프로그램을 작성하세요.
입출력 예

제한사항
- moves의 길이는 100을 넘지 않습니다.
- 3 <= n <= 50
어떻게 해결해야 할까?
- 이 문제 또한 구현해내는 문제이다
- 로봇의 현재의 위치 값을 담고 있는 배열 robotPos와 북쪽부터 시계방향으로 방향 배열 dx, dy를 생성한다
- 그 순서에 맞게 명령 'U(북)', 'R(동)', 'D(남)', 'L(서)' 순서로 문자 배열 ' dir '을 생성한다
- 그리고 네 방향을 탐색하듯이 명령 배열 moves의 값들이 ' dir ' 에 매칭될 때의 ' j ' 값을 찾는다
- dx[j], dy[j]의 값을 배열 ' robotPos ' 에 더해주면 된다
- 이때 더해주고 나서의 로봇의 위치가 격자판을 벗어나지 않는지 꼭 체크해주자 !
해결 코드
- 개체의 이동을 쉽게 구현할 수 있을 만한 문제라 어렵지 않았다
import java.util.*;
public static int[] solution(String move, int n) {
int boardSize = n;
int[] robotPos = new int[2];
int[] dx = {-1, 0, 1, 0};
int[] dy = {0, 1, 0, -1};
char dir = {'U', 'R', 'D', 'L'};
for(int i = 0; i < move.length(); i++) {
char nextMove = move.charAt(i);
for(int j = 0; j < 4; j++) {
if(dir[j] == nextMove) {
int nx = robotPos[0] + dx[j]; int ny robotPos[1] + dy[j];
if(nx < 0 || nx >= n || ny < 0 || ny >=n) break;
robotPos[0] = nx; robotPos[1] = ny;
}
}
}
return robotPos;
}
▼ 정리
- 이번 문제는 개체의 이동을 구현하는 유형 중 고려해야 할 부분이 별로 없는 기초적인 문제이기 때문에 쉽게 해결할 수 있었다.
- 이렇게 개체의 위치를 이동시키며 확인하는 유형의 문제들은 이 [청소 로봇] 문제를 해결한 방식을 기반으로 생각해본다면, 이 문제보다 고려해야 할 부분이 추가되고 제한사항이 좀 더 늘어나게 되더라도 크게 어렵지 않을 것 같다.
▼ Why ?
이전 문제 [안전지대]와 같은 구현 - 시뮬레이션 문제이고, 이번 문제는 이전 문제와 달리 실제로 개체를 움직이는 상황이 주어져 그 개체의 위치를 파악해야 한다는 점 때문에 풀어보았다.
▼ 청소 로봇
문제 정보
- n*n 크기의 이차원 배열 격자판 0행 0열이 청소 로봇의 시작위치입니다.

- 청소 로봇은 다음 규칙에 따라 이동합니다.
- 'U' 명령은 로봇이 위쪽으로 한 칸 이동합니다.
- 'R' 명령은 로봇이 오른쪽으로 한 칸 이동합니다.
- 'L' 명령은 로봇이 왼쪽으로 한 칸 이동합니다.
- 'D' 명령은 로봇이 아래쪽으로 한 칸 이동합니다.
- 만약 로봇이 명령을 수행할 경우 격자판 밖으로 나가는 경우라면 로봇은 해당 명령을 수행 하지 않고 무시합니다.
- 매개변수 n에 격자판 크기가 주어지고, moves에 청소 로봇에 명령을 내린 문자들이 차례대로 나열된 명령 문자열이 주어지면 청소 로봇이 최종적으로 멈춘 위치를 반환하는 프로그램을 작성하세요.
입출력 예

제한사항
- moves의 길이는 100을 넘지 않습니다.
- 3 <= n <= 50
어떻게 해결해야 할까?
- 이 문제 또한 구현해내는 문제이다
- 로봇의 현재의 위치 값을 담고 있는 배열 robotPos와 북쪽부터 시계방향으로 방향 배열 dx, dy를 생성한다
- 그 순서에 맞게 명령 'U(북)', 'R(동)', 'D(남)', 'L(서)' 순서로 문자 배열 ' dir '을 생성한다
- 그리고 네 방향을 탐색하듯이 명령 배열 moves의 값들이 ' dir ' 에 매칭될 때의 ' j ' 값을 찾는다
- dx[j], dy[j]의 값을 배열 ' robotPos ' 에 더해주면 된다
- 이때 더해주고 나서의 로봇의 위치가 격자판을 벗어나지 않는지 꼭 체크해주자 !
해결 코드
- 개체의 이동을 쉽게 구현할 수 있을 만한 문제라 어렵지 않았다
import java.util.*;
public static int[] solution(String move, int n) {
int boardSize = n;
int[] robotPos = new int[2];
int[] dx = {-1, 0, 1, 0};
int[] dy = {0, 1, 0, -1};
char dir = {'U', 'R', 'D', 'L'};
for(int i = 0; i < move.length(); i++) {
char nextMove = move.charAt(i);
for(int j = 0; j < 4; j++) {
if(dir[j] == nextMove) {
int nx = robotPos[0] + dx[j]; int ny robotPos[1] + dy[j];
if(nx < 0 || nx >= n || ny < 0 || ny >=n) break;
robotPos[0] = nx; robotPos[1] = ny;
}
}
}
return robotPos;
}
▼ 정리
- 이번 문제는 개체의 이동을 구현하는 유형 중 고려해야 할 부분이 별로 없는 기초적인 문제이기 때문에 쉽게 해결할 수 있었다.
- 이렇게 개체의 위치를 이동시키며 확인하는 유형의 문제들은 이 [청소 로봇] 문제를 해결한 방식을 기반으로 생각해본다면, 이 문제보다 고려해야 할 부분이 추가되고 제한사항이 좀 더 늘어나게 되더라도 크게 어렵지 않을 것 같다.