2차원 배열을 가지고 노는 문제이다. width랑 height를 length로 구하고, 주어진 제한사항에 알맞게 S지점에서 이동시키면 된다.
function solution(park, routes) {
var answer = [];
let start = [0,0];
let arr = park.map((data)=>{
return data.split('');
})
let width = arr[0].length;
let height = arr.length;
arr.map((d,i)=>{
d.map((data,idx)=>{
if(data === 'S'){
return start = [i,idx]
}
})
})
routes.forEach((data,idx)=>{
let command = data.split(' ');
let count = 0;
if(command[0] === 'N'){
count = parseInt(command[1]);
let check = true;
let copy = parseInt(start[0]);
if(copy - count >= 0){
for(var i = 0; i<count; i++){
if(park[copy-1][start[1]] === 'X'){
check = false;
break;
}else{
copy--;
}
}
if(check){
start[0] = parseInt(start[0]-count);
}
}
}else if(command[0] === 'S'){
count = parseInt(command[1])
let check = true;
let copy = parseInt(start[0]);
if(copy + count < height){
for(var i = 0; i<count; i++){
if(park[copy+1][start[1]] === 'X'){
check = false;
break;
}else{
copy++;
}
}
if(check){
start[0] = parseInt(start[0]+count);
}
}
}else if(command[0] === 'W'){
count = parseInt(command[1])
let check = true;
let copy = parseInt(start[1]);
if(copy - count >= 0){
for(var i = 0; i<count; i++){
if(park[start[0]][copy-1] === 'X'){
check = false;
break;
}else{
copy--;
}
}
if(check){
start[1] = parseInt(start[1]-count);
}
}
}else{
count = parseInt(command[1])
let check = true;
let copy = parseInt(start[1]);
if(copy + count < width){
for(var i = 0; i<count; i++){
if(park[start[0]][copy+1] === 'X'){
check = false;
break;
}else{
copy++;
}
}
if(check){
start[1] = parseInt(start[1]+count);
}
}
}
})
return start
}
비교적 간단한 문제지만, 세부사항을 하나하나 조밀히 따져야 하는 것에서 버그를 발견하는데 시간이 조금 걸렸다. 또한 2차원 배열이 약하다고 느껴서 추가적으로 보충학습을 해야겠다.