캐릭터의 좌표, Javascript

cptkuk91·2023년 2월 5일
1

Algorithm

목록 보기
128/161

문제

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"도 똑같다.

profile
메일은 매일 확인하고 있습니다. 궁금하신 부분이나 틀린 부분에 대한 지적사항이 있으시다면 언제든 편하게 연락 부탁드려요 :)

0개의 댓글