[プログラマー][Leve 1]キーボードを押す


質問する

[1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5]	"right"
1,4,7 -> L
3,6,9 -> R
2,5,8 -> 두 엄지손가락의 현재 키패드의 위치에서 더 가까운 엄지손가락을 사용합니다. 만약 두 엄지손가락의 거리가 같다면, 오른손잡이는 오른손 엄지손가락, 왼손잡이는 왼손 엄지손가락을 사용합니다.

정답 ) "LRLLLRLLRRL"

コード#コード#

function solution(numbers, hand) {
    var answer = '';
    let left = [4, 1];
    let right = [4, 3];

    numbers.forEach(num=>{
      if(num%3===2 || num === 0){
        let center = [0, 2];
        num === 0 ? center[0] = 4 : center[0] = Math.ceil(num/3);

        let right_distance = getDistance(right, center);
        let left_distance = getDistance(left, center);

        if(right_distance < left_distance || (right_distance == left_distance && hand === 'right')){
          answer += 'R';
          right = center;
        } else if(left_distance < right_distance || (right_distance == left_distance && hand === 'left')){
          answer += 'L';
          left = center;
        } 
      } else if(num%3===1){
          left = [Math.ceil(num/3), 1];
          answer += 'L';
      } else if(num%3===0){
          right = [Math.ceil(num/3), 3];
          answer += 'R';
      } 
    })

    return answer;
}

function getDistance(start, end){
  return Math.abs(start[0]-end[0])+Math.abs(start[1]-end[1]);
}

ポスト

  • 体感難易度★