본문 바로가기

코딩테스트

[프로그래머스] level1. 키패드 누르기 (javascript)

반응형

문제

스마트폰 전화 키패드의 각 칸에 다음과 같이 숫자들이 적혀 있습니다.

이 전화 키패드에서 왼손과 오른손의 엄지손가락만을 이용해서 숫자만을 입력하려고 합니다.
맨 처음 왼손 엄지손가락은 * 키패드에 오른손 엄지손가락은 # 키패드 위치에서 시작하며, 엄지손가락을 사용하는 규칙은 다음과 같습니다.

엄지손가락은 상하좌우 4가지 방향으로만 이동할 수 있으며 키패드 이동 한 칸은 거리로 1에 해당합니다.
왼쪽 열의 3개의 숫자 1, 4, 7을 입력할 때는 왼손 엄지손가락을 사용합니다.
오른쪽 열의 3개의 숫자 3, 6, 9를 입력할 때는 오른손 엄지손가락을 사용합니다.
가운데 열의 4개의 숫자 2, 5, 8, 0을 입력할 때는 두 엄지손가락의 현재 키패드의 위치에서 더 가까운 엄지손가락을 사용합니다.
4-1. 만약 두 엄지손가락의 거리가 같다면, 오른손잡이는 오른손 엄지손가락, 왼손잡이는 왼손 엄지손가락을 사용합니다.
순서대로 누를 번호가 담긴 배열 numbers, 왼손잡이인지 오른손잡이인 지를 나타내는 문자열 hand가 매개변수로 주어질 때, 각 번호를 누른 엄지손가락이 왼손인 지 오른손인 지를 나타내는 연속된 문자열 형태로 return 하도록 solution 함수를 완성해주세요.

나의 풀이

function solution(numbers, hand) {
    var answer = '';

    let center = [2,5,8,11]
    let location_L = 10;
    let location_R = 12;
    let dist_L = 0;
    let dist_R = 0;

    for(let i = 0 ; i < numbers.length; i++){

        let val = numbers[i]
        if (numbers[i] == 0 ){
            val = 11;
        }
        if ( val == 1 || val == 4 || val == 7){
            answer += 'L';
            location_L =  val;
        } else if (val == 3 || val == 6 || val == 9){
            answer += 'R';
            location_R =  val;
        } else{
            dist_L = center.indexOf(location_L) != -1 ? Math.abs(val - location_L ) /3 : Math.abs(val-1 - location_L ) /3 +1;
            dist_R = center.indexOf(location_R) != -1 ? Math.abs(val - location_R ) /3 : Math.abs(val+1 - location_R ) /3 +1;

            if (dist_L == dist_R){
                if (hand == "right"){
                    answer += 'R'
                    location_R = val;
                } else{
                     answer += 'L'
                    location_L = val;   
                } 
            } else if(dist_L > dist_R) {
                answer += 'R'
                 location_R = val;
            } else{
                answer += 'L'
                location_L = val;
            }
        }

    }
    return answer;
}

다른이들의 정답

방법1.

https://bsscl.tistory.com/47

 

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

이게 Level 1이라니......( ᵕ̩̩ㅅᵕ̩̩ ) 링크 programmers.co.kr/learn/courses/30/lessons/67256 코딩테스트 연습 - 키패드 누르기 [1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5] "right" "LRLLLRLLRRL" [7, 0, 8, 2,..

bsscl.tistory.com

방법2.
블로그

 

[알고리즘] 2020 카카오 인턴십 키패드 누르기 -JavaScript

Algorithm Problem with JavaScript — 15day스마트폰 전화 키패드의 각 칸에 다음과 같이 숫자들이 적혀 있습니다.이 전화 키패드에서 왼손과 오른손의 엄지손가락만을 이용해서 숫자만을 입력하려고 합

velog.io

2차원 배열을 새로 선언해서 거리를 구했다.
2차원 배열을 사용하고, 이를 탐색하기 위해 map을 사용해서 배열안의 배열에 접근했다.
그리고 arr.includes() 함수를 사용해서 있는지 판단했다.

방법의 차이인 듯 합니다.

 

참조

includes() 메서드는 배열이 특정 요소를 포함하고 있는지 판별합니다.

find() 메서드는 주어진 판별 함수를 만족하는 첫 번째 요소의 값을 반환합니다. 그런 요소가 없다면 undefined를 반환합니다.

 

 

반응형