https://school.programmers.co.kr/learn/courses/30/lessons/120861?language=javascript
function solution(keyinput, board) {
let result = [0, 0];
for(let i = 0; i < keyinput.length; i++){
if(keyinput[i] === "up"){
if(result[1] < Math.floor(board[1] / 2)){
result[1]++;
} else {
result[1] = Math.floor(board[1] / 2);
}
} else if(keyinput[i] === "down"){
if(result[1] > -Math.floor(board[1] / 2)){
result[1]--;
} else {
result[1] = -Math.floor(board[1] / 2);
}
} else if(keyinput[i] === "left"){
if(result[0] > -Math.floor(board[0] / 2)){
result[0]--;
} else {
result[0] = -Math.floor(board[0] / 2);
}
} else if(keyinput[i] === "right"){
if(result[0] < Math.floor(board[0] / 2)){
result[0]++;
} else {
result[0] = Math.floor(board[0] / 2);
}
}
}
return result;
}
function solution(keyinput, board) {
let result = [0, 0];
for (const move of keyinput) {
switch (move) {
case "up":
result[1] = Math.min(Math.floor(board[1] / 2), result[1] + 1);
break;
case "down":
result[1] = Math.max(-Math.floor(board[1] / 2), result[1] - 1);
break;
case "left":
result[0] = Math.max(-Math.floor(board[0] / 2), result[0] - 1);
break;
case "right":
result[0] = Math.min(Math.floor(board[0] / 2), result[0] + 1);
break;
}
}
return result;
}
우선 if, else를 통해 코드를 길게 작성해도 통과할 수 있는 문제다. 비효율적이라고 생각하지만, 가장 단순한 방법이라고 생각했다. 문제 설명을 읽어봤을 때 board의 가로 크기가 9라면 왼쪽으로 최대 -4까지만 이동할 수 있다고한다. 따라서 [-4, -3, -2, -1, 0 , 1, 2, 3, 4] 이렇게 존재한다는 뜻이다. 이걸 파악하고 Math.floor를 통해서 반내림했다. 만약 최대값까지 진행됐을 경우 -4까지 밖에 없기 때문에 -4를 그대로 출력하면 된다. "up", "down"도 똑같다.