https://school.programmers.co.kr/learn/courses/30/lessons/172928
설명
단순 구현 문제인데 생각했던 것보다 시간을 매우 많이 잡아먹어서 정리한다.
주의해야할 점은 산책할 때, 점프해서 가는게 아니라 해당 지점까지 한칸씩 이동하면서 간다.
따라서 가는 도중에 장애물을 만나면 안된다.
코드
import java.util.*;
class Solution {
static int[] move = new int[2];
static int[][] map;
static int height, width;
public int[] solution(String[] park, String[] routes) {
int[] answer= {};
height = park.length;
width = park[0].length();
map = new int[height][width];
for(int i = 0; i < height; i++) {
for(int j = 0; j < width; j++) {
if(park[i].charAt(j) == 'S') {
move[0] = i;
move[1] = j;
map[i][j] = 1;
}
else if(park[i].charAt(j) == 'O') {
map[i][j] = 0;
}
else if(park[i].charAt(j) == 'X'){
map[i][j] = -1;
}
}
}
int[] temp = move;
for(String st : routes) {
String way = st.split(" ")[0];
int len = Integer.parseInt(st.split(" ")[1]);
int ny = move[0];
int nx = move[1];
// 길이만큼 해당 방향으로 이동한다.
for(int i = 0; i < len; i++) {
if(way.equals("N")) {
ny--;
}
else if(way.equals("S")) {
ny++;
}
else if(way.equals("W")) {
nx--;
}
else if(way.equals("E")){
nx++;
}
if(ny < 0 || ny >= height || nx < 0 || nx >= width) {
continue;
}
if(map[ny][nx] == -1) {
break;
}
if(i == len - 1) {
move[0] = ny;
move[1] = nx;
}
}
}
answer = move;
return answer;
}
}
반응형