Javascript/코딩테스트-연습

[JavaScript] 캐릭터의 좌표 - 프로그래머스

BeomBe 2024. 4. 8. 21:36
반응형

문제 설명

자세한 문제 설명은 아래 링크 참조해주세요.

https://school.programmers.co.kr/learn/courses/30/lessons/120861

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

나의 풀이

가능한 짧게 만들어보고 싶었다.

function solution(keyinput, board) {
    let answer = [0,0];
    for (let p of keyinput) {
        switch(p){
            case 'left': if (-answer[0] < board[0]/2-1) answer[0]--; break;
            case 'right': if (answer[0] < board[0]/2-1) answer[0]++; break;
            case 'up': if (answer[1] < board[1]/2-1) answer[1]++; break;
            case 'down': if (-answer[1] < board[1]/2-1) answer[1]--; break;
        }
    }
    return answer;
}

 

다른사람들의 풀이

function solution(keyinput, board) {
    var answer = [0, 0];

    const bndrX = (board[0] - 1) / 2;
    const bndrY = (board[1] - 1) / 2;

    keyinput.forEach(cmd => {
        switch(cmd) {
            case 'up': {
                if(answer[1] !== bndrY) answer[1]++;
                break;
            }
            case 'down': {
                if(answer[1] !== -bndrY) answer[1]--;
                break;
            }
            case 'left': {
                if(answer[0] !== -bndrX) answer[0]--;
                break;
            }
            case 'right': {
                if(answer[0] !== bndrX) answer[0]++;
                break;
            }
        }
    });

    return answer;
}

 

다른 풀이들도 눈에 들어오지만, 아래 풀이가 그냥 직관적으로 눈에 들어와 가져왔다.

function solution(keyinput, board) {
    var answer = [];
    let x = 0;
    let y = 0;

    for(let i=0; i<keyinput.length; i++){
        if(keyinput[i] == "right" & x+1 <= (board[0]-1)/2){
            x += 1
        }
        if(keyinput[i] == "left" & x-1 >= -((board[0]-1)/2)){
            x -= 1
        }
        if(keyinput[i] == "up" & y+1 <= (board[1]-1)/2){
            y += 1
        }
        if(keyinput[i] == "down" & y-1 >= -((board[1]-1)/2)){
            y -= 1
        }            
    }
    answer.push(x,y)
    return answer;
}

 

다양한 방식으로 짤 수 있지만, 나는 상대적으로 최대한 기본 코드를 활용하는것을 좀 더 좋아하다보니, 마지막 풀이법이 좋아보인다...

반응형