park
상수에게 전해지는 재료의 정보를 나타내는 정수 배열 | ["SOO","OOO","OOO"] | 3 ≤ park의 길이 ≤ 50, 3 ≤ park[i]의 길이 ≤ 50, park[i]는 다음 문자들로 이루어져 있으며 시작지점은 하나만 주어짐
routes
로봇 강아지가 수행할 명령어를 담은 배열 | ["E 2","S 2","W 1"] | 1 ≤ routes의 길이 ≤ 50, 각 원소는 "op n"과 같은 구조로 이루어져 있으며, op는 이동할 방향, n은 이동할 칸의 수를 의미
로봇 강아지가 모든 명령을 수행 후 놓인 위치를 [세로 방향 좌표, 가로 방향 좌표] 순으로 배열에 담아 return
Map에 동서남북 좌표 정보를 저장한 뒤, routes 명령어대로 움직이면서 cnt 증가, 한번이라도 이동못하는 구역을 마주친다면 cnt 만큼 방향 좌표대로 값을 감소
import java.util.*;
class Solution {
public int[] solution(String[] park, String[] routes) {
int[] ans = new int[2];
Map<Character, int[]> xy = new HashMap<>();
xy.put('N', new int[]{-1,0});
xy.put('S', new int[]{1,0});
xy.put('W', new int[]{0,-1});
xy.put('E', new int[]{0,1});
int N = park.length, M = park[0].length();
for(int n=0; n<N; n++){
for(int m=0; m<M; m++){
if(park[n].charAt(m) == 'S'){
ans = new int[]{n,m};
break;
}
}
}
for(String route : routes){
int[] dxdy = xy.get(route.charAt(0));
int move = route.charAt(2) - '0';
int nx = ans[0], ny = ans[1];
for(int n=0; n<move; n++){
nx+=dxdy[0];
ny+=dxdy[1];
if(0<=nx && nx<N && 0<=ny && ny<M && park[nx].charAt(ny) != 'X'){
continue;
}
nx = ans[0];
ny = ans[1];
break;
}
ans[0] = nx;
ans[1] = ny;
}
return ans;
}
}
Tip : 장애물을 'X'라 표시하고 'X'구역은 가지 못한다고 할 때 [!='X' : 'X'가 아니다]로 주는 것이 낫다. 다른 마크와 같아야한다고 둘 경우, 또 다른 마크가 존재한다면 틀린 답이 된다.