문제
격자판의 크기와 문자열을 인자로 입력받아, 청소로봇에 명령을 내린 문자들이 차례대로 이동시키다가
최종적으로 멈춘 위치를 반환하는 프로그램을 작성하시오.
| ~로봇~ | ||||
조건1. n*n 크기의 이차원 배열 격자판 0행 0열이 청소 로봇이 시작 위치
조건2. 'U' 명령은 로봇이 위쪽으로 한 칸 이동합니다.
조건3. 'R' 명령은 로봇이 오른쪽으로 한 칸 이동합니다.
조건4. 'L' 명령은 로봇이 왼쪽으로 한 칸 이동합니다.
조건5. 'D' 명령은 로봇이 아래쪽으로 한 칸 이동합니다.
조건6. 만약 로봇이 명령을 수행하다가, 격자판 밖으로 나가는 경우에는 해당 명령을 수행하지 않습니다.
문제풀이
class Solution{
public int[] solution(int n ,String moves){
int[] dx = {-1,0,1,0};
int[] dy = {0,1,0,-1};
//로봇청소기의 현재 위치
int x =0, y =0;
char[] move = {'U','R','D','L'}; //위,오른쪽,아래,왼쪽
for(char c : moves.toCharArray()){
for(int k = 0; k < 4; k++){
if(c == move[k]){
x = x + dx[k];
y = y + dy[k];
/*
* 행(x)과 열(y)이 0보다 작거나 n(격자판의 크기)보다
* 큰 경우는 더한 값을 다시 빼준다.
*/
if(x < 0 || x >= n || y < 0 || y >= n){
x = x - dx[k];
y = y - dy[k];
}
}
}
}
return new int[]{x, y};
}
}
시뮬레이션의 알고리즘은 아래의 배열의 초기값을 그냥 무조건 외워두는게 좋을 것 같다!
int[] dx = {-1,0,1,0};
int[] dy = {0,1,0,-1};
dx[0] dy[0]: 위
dx[1] dy[1]: 오른쪽
dx[2] dy[2]: 아래
dx[2] dy[2]: 왼쪽
'알고리즘' 카테고리의 다른 글
| [알고리즘]인수로 들어온 정수의 약수 구하기_java (0) | 2023.06.15 |
|---|---|
| [알고리즘]HashSet을 이용한 집합연산(합집합,교집합,차집합) + 프로그래밍적 집합연산 (0) | 2023.06.14 |
| [알고리즘] 대문자를 기준으로 문자열 나누기_java (0) | 2023.05.29 |
| [알고리즘]유클리드 호제법을 이용한 최대공약수와 최소공배수 구하기_java (0) | 2023.05.29 |
| [알고리즘]프로그래머스-추억점수(2차원 배열과 해시테이블의 합작)_java (2) | 2023.05.29 |