장애물들과 시작점의 위치가 표시된 지도 park
가 주어집니다. routes
array의 원소 route는 방향과 거리를 표시한 String입니다. 예를 들어 "E 3"이라는 route는 east 방향으로 3칸을 의미합니다. routes
를 읽으며 시작점부터 이동할 건데, 중간에 park의 경계를 벗어나거나 장애물을 뚫고 가려는 route에 대한 이동은 아예 실행하지 않습니다. 이 때 최종 위치를 리턴하는 문제입니다. 특별히 한 건 없고, 난이도도 레벨 1로 책정된 것이 단순 구현문제 같습니다.
class Solution {
public int[] solution(String[] park, String[] routes) {
int[] answer = {};
int r = 0;
int c = 0;
for (int i = 0; i < park.length; i++) {
for (int j = 0; j < park[0].length(); j++) {
if (park[i].charAt(j) == 'S') {
r = i;
c = j;
}
}
}
for (String route : routes) {
int prevR = r;
int prevC = c;
char direction = route.charAt(0);
int distance = route.charAt(2) - '0';
if (direction == 'N') {
for (int i = 0; i < distance; i++) {
r--;
if (r < 0 || park[r].charAt(c) == 'X') {
r = prevR;
break;
}
}
}
if (direction == 'S') {
for (int i = 0; i < distance; i++) {
r++;
if (r >= park.length || park[r].charAt(c) == 'X') {
r = prevR;
break;
}
}
}
if (direction == 'E') {
for (int i = 0; i < distance; i++) {
c++;
if (c >= park[0].length() || park[r].charAt(c) == 'X') {
c = prevC;
break;
}
}
}
if (direction == 'W') {
for (int i = 0; i < distance; i++) {
c--;
if (c < 0 || park[r].charAt(c) == 'X') {
c = prevC;
break;
}
}
}
}
return new int[] {r, c};
}
}