반응형

문제 설명

전체 문제는 프로그래머스에 있습니다.

 

 

 

제한 사항

 

 

풀이

처음 문제를 본 나의 생각

  • 1,4,7은 L로 고정, 3,6,9는 R로 고정
  • 2,5,8,0일 경우가 문제인데.. 우선 키패드의 좌표 x, y를 저장해놨다가 현재 위치 값과 계산해보기..

 

 

 

그래서 나온 소스코드는 아래와 같다.

 

function solution(numbers, hand) {
    var answer = [], coordMap = new Map();
    coordMap.set(1, [0, 0]);
    coordMap.set(2, [0, 1]);
    coordMap.set(3, [0, 2]);
    coordMap.set(4, [1, 0]);
    coordMap.set(5, [1, 1]);
    coordMap.set(6, [1, 2]);
    coordMap.set(7, [2, 0]);
    coordMap.set(8, [2, 1]);
    coordMap.set(9, [2, 2]);
    coordMap.set(0, [3, 1]);
    
    let posL = [3, 0], posR = [3, 2];
    
    numbers.forEach((v) => {
        if("147*".includes(v)) {
            posL = coordMap.get(v);
            answer += "L";
        } else if("369#".includes(v)) {
            posR = coordMap.get(v);
            answer += "R";
        } else {
            let distanceL = Math.abs(coordMap.get(v)[0]-posL[0]) + Math.abs(coordMap.get(v)[1]-posL[1]);
            let distanceR = Math.abs(coordMap.get(v)[0]-posR[0]) + Math.abs(coordMap.get(v)[1]-posR[1]);
            
            if(distanceL == distanceR) {
                if(hand == "left") {
                    posL = coordMap.get(v);
                    answer += "L";
                } else {
                    posR = coordMap.get(v);
                    answer += "R";
                }
            } else {
                if(distanceL > distanceR) {
                    posR = coordMap.get(v);
                    answer += "R";
                } else {
                    posL = coordMap.get(v);
                    answer += "L";
                }
            }
        }
    });
    
    return answer;
}

 

이번 문제는 풀긴 했지만.. 너무 억지로 코딩을 한 느낌이라 다른 사람의 풀이도 확인해봤다.

다행히(?) 다들 고만고만하게 짠 느낌이라.. 패스

반응형