프로그래머스
[프로그래머스] 공원 산책
so_yeon_-
2024. 11. 27. 21:07
https://school.programmers.co.kr/learn/courses/30/lessons/172928
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
1차 제출
function solution(park, routes) {
const rowIndex = park.findIndex(row => row.includes("S"));
const colIndex = park[rowIndex].indexOf("S");
const startPark = [rowIndex, colIndex];
const rowSize = park.length;
const colSize = park[0].length;
let temp = startPark;
for (route of routes) {
const move = Number(route.substr(-1));
switch (route.substr(0, 1)) {
case "N":
if (temp[0] - move >= 0) {
let result = true;
for (var i = 0; i < move; i++) {
if (park[temp[0] - (i + 1)][temp[1]] == "X") {
result = false;
break;
}
}
if (result) {
temp[0] = temp[0] - move;
}
}
break;
case "S":
if (temp[0] + move < rowSize) {
let result = true;
for (var i = 0; i < move; i++) {
if (park[temp[0] + (i + 1)][temp[1]] == "X") {
result = false;
break;
}
}
if (result) {
temp[0] = temp[0] + move;
}
}
break;
case "W":
if (temp[1] - move >= 0) {
let result = true;
for (var i = 0; i < move; i++) {
if (park[temp[0]][temp[1] - (i + 1)] == "X") {
result = false;
break;
}
}
if (result) {
temp[1] = temp[1] - move;
}
}
break;
case "E":
if (temp[1] + move < colSize) {
let result = true;
for (var i = 0; i < move; i++) {
if (park[temp[0]][temp[1] + (i + 1)] == "X") {
result = false;
break;
}
}
if (result) {
temp[1] = temp[1] + move;
}
}
break;
}
}
return temp;
}
결과 : 100점
- 답은 맞았으나, 코드가 너무너무 길고 지저분해서 수정이 필요하다고 느꼈다.
수정
function solution(park, routes) {
const rowIndex = park.findIndex(row => row.includes("S"));
const colIndex = park[rowIndex].indexOf("S");
const startPark = [rowIndex, colIndex];
const rowSize = park.length;
const colSize = park[0].length;
const directions = {
N: [-1, 0], // 북쪽
S: [1, 0], // 남쪽
W: [0, -1], // 서쪽
E: [0, 1] // 동쪽
};
let position = startPark;
for (let route of routes) {
const direction = route[0];
const move = Number(route.slice(-1));
const [dx, dy] = directions[direction];
let canMove = true;
for (let i = 1; i <= move; i++) {
const newRow = position[0] + dx * i;
const newCol = position[1] + dy * i;
if (newRow < 0 || newRow >= rowSize || newCol < 0 || newCol >= colSize || park[newRow][newCol] === 'X') {
canMove = false;
break;
}
}
if (canMove) {
position[0] += dx * move;
position[1] += dy * move;
}
}
return position;
}