본문 바로가기
👩‍💻 Programming/Coding Test 문제 풀이

[Programmers] level 1: 키패드 누르기 by JavaScript

by codingBear 2022. 6. 29.
728x90
반응형

 이번 글은 아래 링크의 글들을 참조하여 작성하였습니다.

https://tech.kakao.com/2020/07/01/2020-internship-test/

 

 

2020 카카오 인턴십 for Tech developers 문제해설

2020년 카카오의 여름 인턴십이 시작 되었습니다.여름 인턴십의 첫번째 관문인 코딩 테스트가 2020년 5월 9일 오후 2시부터 6시까지 진행되었는데요, 온라인으로 진행되었기 때문에 코로나19로부터

tech.kakao.com

https://onlydev.tistory.com/61

 

[프로그래머스] 키패드 누르기 | 카카오 인턴 코딩 테스트 | JavaScript

[카카오 인턴] 키패드 누르기 문제 설명 스마트폰 전화 키패드의 각 칸에 다음과 같이 숫자들이 적혀 있습니다. 이 전화 키패드에서 왼손과 오른손의 엄지손가락만을 이용해서 숫자만을 입력하

onlydev.tistory.com


 이번 문제에 대한 자세한 사항은 아래 링크를 참조하길 바란다.

https://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, 8, 3, 1, 5, 7, 6, 2] "left" "LRLLRRLLLRR" [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] "right" "LLRLLRLLRL"

programmers.co.kr


 처음엔 입력 숫자와 손가락 위치의 차이값을 좌표가 아닌 숫자 그 자체로 계산을 해서 답이 자꾸 어긋났었다. 다른 사람들의 코드를 참고했더니 키패드의 숫자마다 좌표값을 매겨 객체에 담아 계산하면 되는 문제였다. 문제를 꼼꼼히 읽어 제시하는 제한 조건을 반드시 지켜야 함을 다시금 느꼈다.

 

Solutions

Solution 1.
const input = [1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5];
// const input = [7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2];
// const input = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0];

console.log(solution(input, 'right'));

function solution(numbers, hand) {
  const keyPad = {
    1: [0, 0],
    2: [1, 0],
    3: [2, 0],
    4: [0, 1],
    5: [1, 1],
    6: [2, 1],
    7: [0, 2],
    8: [1, 2],
    9: [2, 2],
    '*': [0, 3],
    0: [1, 3],
    '#': [2, 3],
  };

  let leftPosition = '*';
  let rightPosition = '#';
  let answer = '';

  for (const num of numbers) {
    if (num === 1 || num === 4 || num === 7) {
      answer += 'L';
      leftPosition = num;
    } else if (num === 3 || num === 6 || num === 9) {
      answer += 'R';
      rightPosition = num;
    } else {
      const rightDiff =
        Math.abs(keyPad[num][0] - keyPad[rightPosition][0]) +
        Math.abs(keyPad[num][1] - keyPad[rightPosition][1]);
      const leftDiff =
        Math.abs(keyPad[num][0] - keyPad[leftPosition][0]) +
        Math.abs(keyPad[num][1] - keyPad[leftPosition][1]);

      if (rightDiff < leftDiff) {
        answer += 'R';
        rightPosition = num;
      } else if (rightDiff > leftDiff) {
        answer += 'L';
        leftPosition = num;
      } else {
        if (hand === 'right') {
          answer += 'R';
          rightPosition = num;
        } else {
          answer += 'L';
          leftPosition = num;
        }
      }
    }
  }

  return answer;
}

함께 보기

  • Math.abs() method

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/abs

 

Math.abs() - JavaScript | MDN

The Math.abs() function returns the absolute value of a number. That is, it returns x if x is positive or zero, and the negation of x if x is negative.

developer.mozilla.org

 

728x90
반응형

댓글