문제
문제 풀이
import java.util.*;
class Solution {
public int[] solution(String[] park, String[] routes) {
HashMap<Character, int[]> map = new HashMap<>();
map.put('E', new int[]{0,1});
map.put('W', new int[]{0,-1});
map.put('N', new int[]{-1,0});
map.put('S', new int[]{1,0});
int[] start = {0,0};
for(int i = 0; i < park.length; i++){
for(int j = 0; j < park[i].length(); j++){
char c = park[i].charAt(j);
if(c == 'S'){
start[0] = i;
start[1] = j;
}
}
}
for(String route : routes){
char dir = route.charAt(0);
int moveCnt = route.charAt(2) - 48;
int[] xy = map.get(dir);
int x = xy[0];
int y = xy[1];
int curX = start[0];
int curY = start[1];
boolean isOk = true;
for(int i = 0; i < moveCnt; i++){
curX += x;
curY += y;
if(curX < 0 || curY < 0 || curX > park.length - 1 || curY > park[0].length() - 1){
isOk = false;
break;
}
if(park[curX].charAt(curY) == 'X'){
isOk = false;
break; //+x나 +y 했던게 취소되는거임
}
}
if(isOk){
start[0] = curX;
start[1] = curY;
}
}
return start;
}
// private int[] FindStart(String[] park){
// for(int i = 0; i < park.length; i++){
// for(int j = 0; j < park[i].length(); j++){
// char c = park[i].charAt(j);
// if(c == 'S')
// return new int[]{i, j};
// }
// }
// return new int[]{0, 0};
// }
}
답안 풀이
HashMap을 쓰면 될 것 같다 생각하긴 했지만 이를 어떻게 활용해야할지 몰랐다.
일단 map으로 가는 방향과 +1을 해주고 routes 배열에서의 숫자를 moveCnt로 받아 그만큼 가줬다.
가주는 과정에서 범위를 벗어나거나 X가 있으면 break를 통해 취소해준다.
if문에서 걸리지 않으면 최종적으로 S는 이동한다.
이런 유용한 정보를 나눠주셔서 감사합니다.