왼손으로 누르는 경우, 가운데 경우, 오른손으로 누르는 경우를 별도의 객체로 설정.
ㄴ 객체의 key = '번호'/'*'/'#' , value = [x,y] ⭐ 이 때, 객체 키로 들어가는 번호는 문자열로 저장됨에 주의
초기 왼손과 오른손의 좌표를 지정
numbers를 순회하며, 주어진 로직에 따라 다음에 눌러야 할 손을 result에 추가
ㄴ (1) left, right 자료구조에 속해있으면 해당 손으로 누름
ㄴ (2) middle이면, 현재 왼손/오른손 위치에서 가까운 거리에 있는 손으로 누름
ㄴ (3) 거리가 같다면 주사용 손으로 누름
⭐ 성찰
❓ 문제 상황
키패드 누르기
👨💻 문제 해결
✅ 1차 풀이: 객체를 이용한 하드코딩
문자열
로 저장됨에 주의function solution(numbers, hand) { const left = { 1: [0, 0], 4: [1, 0], 7: [2, 0], "*": [3, 0] }; const middle = { 2: [0, 1], 5: [1, 1], 8: [2, 1], 0: [3, 1] }; const right = { 3: [0, 2], 6: [1, 2], 9: [2, 2], "#": [3, 2] };
let cl = left["*"]; let cr = right["#"]; let result = "";
for (num of numbers) { const key = num.toString(); if (Object.keys(left).includes(key)) { result += "L"; cl = left[key]; } else if (Object.keys(right).includes(key)) { result += "R"; cr = right[key]; } else { let dl = Math.abs(cl[0] - middle[key][0]) + Math.abs(cl[1] - middle[key][1]); let dr = Math.abs(cr[0] - middle[key][0]) + Math.abs(cr[1] - middle[key][1]); if (dl < dr) { result += "L"; cl = middle[key]; } else if (dr < dl) { result += "R"; cr = middle[key]; } else { if (hand === "left") { result += "L"; cl = middle[key]; } else { result += "R"; cr = middle[key]; } } } } return result; }