[프로그래머스] 키패드 누르기

SeHoony·2022년 8월 18일
1

코테준비

목록 보기
9/27

1. 문제

키패드 누르기
https://school.programmers.co.kr/learn/courses/30/lessons/67256

2. 초기 구현

가장 중요한 생각은 각 2,5,8,0 번호를 누를 때 왼엄지를 쓸 지 오른엄지를 쓸 지 결정하는 것일 것이다.

이 때 휴패폰 키패드를 2차원 배열로 각 패드마다 값을 x,y값을 주면 지금 누르고자 하는 키와 왼엄지, 오른엄지의 위치를 구할 수 있게 된다.

이 생각하는게 조금 어려웠다. 다른 분들의 풀이방법도 거의 비슷했다.

function solution(numbers, hand) {
    var answer = '';
    const table = new Map()
    table.set(1, [0,0])
    table.set(2, [0,1])
    table.set(3, [0,2])
    table.set(4, [1,0])
    table.set(5, [1,1])
    table.set(6, [1,2])
    table.set(7, [2,0])
    table.set(8, [2,1])
    table.set(9, [2,2])
    table.set(0, [3,1])
    table.set("*", [3,0])
    table.set("#", [3,2])
    let lPos = [3,0]
    let rPos = [3,2]
    
    numbers.map(e => {
        if([1,4,7].includes(e)){
            answer += 'L'
            lPos = table.get(e)
        }
        else if([3,6,9].includes(e)){
            answer += 'R'
            rPos = table.get(e)
        }
        else {
            let [x,y] = table.get(e)
            let [lx, ly] =lPos
            let [rx, ry] = rPos
            
            // console.log(x,y,lx,ly,rx,ry)
            // console.log('????',Math.abs(lx-x), Math.abs(ly-y), '//',  Math.abs(rx-x), Math.abs(ry-y))
            if(Math.abs(lx-x) + Math.abs(ly-y) === Math.abs(rx-x) + Math.abs(ry-y)){
                if(hand === 'left'){
                    answer+="L"
                lPos = table.get(e)
                }
                else {
                     answer+="R"
                rPos = table.get(e)
                }
            }else{
            if(Math.abs(lx-x) + Math.abs(ly-y) < Math.abs(rx-x) + Math.abs(ry-y)){
                answer+="L"
                lPos = table.get(e)
            }
            else{
                answer+="R"
                rPos = table.get(e)
            }
                }
        }
    })
    return answer;
}
profile
두 발로 매일 정진하는 두발자, 강세훈입니다. 저는 '두 발'이라는 이 단어를 참 좋아합니다. 이 말이 주는 건강, 정직 그리고 성실의 느낌이 제가 주는 분위기가 되었으면 좋겠습니다.

0개의 댓글