프로그래머스 | 키패드 누르기_JS
난이도 : Level. 1
언어 : Javascript
출제 내역 : 2020 카카오 인턴십
❓ Question
스마트폰 키패드를 누르는데, 조건에 따라 번호를 눌러야 합니다.
양 손을 사용하는데 어떤 손가락으로 키패드를 눌렀는지 파악해야 합니다.
📝 My Solution
전체 풀이 코드 👈🏻 클릭시 Github로 이동
function solution(numbers, hand) {
var answer = "";
const numL = [1,4,7,'*'];
const numR = [3,6,9,'#'];
const numC = [2,5,8,0];
let posL = [0,3];
let posR = [0,3];
let posC = [1,-1];
일단 손가락 별로 누를 수 있는 번호와 가운데 있는 번호
그리고 현재 손가락이 있는 위치를 나타낼 수 있는 배열도 만들어 줍니다.
for (let i = 0; i<numbers.length; i++) {
if (numL.indexOf(numbers[i]) >= 0) {
answer += "L";
posL = [0, numL.indexOf(numbers[i])];
} else if (numR.indexOf(numbers[i]) >= 0) {
answer += "R";
posR = [0, numR.indexOf(numbers[i])];
}
우선 양 손가락이 누를 수 있는 번호가 들어오면
어떤 손으로 눌렀다 표시한 뒤,
해당 손가락이 있는 위치를 좌표로 만들어줍니다.
else {
posC = [1, numC.indexOf(numbers[i])];
let routeL = Math.abs(posC[0]-posL[0]) + Math.abs(posC[1]-posL[1]);
let routeR = Math.abs(posC[0]-posR[0]) + Math.abs(posC[1]-posR[1]);
if (routeL === routeR) {
if (hand === 'right') {
answer += 'R';
posR = [1, numC.indexOf(numbers[i])];
} else {
answer += 'L';
posL = [1, numC.indexOf(numbers[i])];
}
}
각 손가락만 누를 수 있는 번호를 걸러냈다면
이번에는 가운데 있는 번호를 어떤 손가락이 누를지 걸러줍니다.
현재 눌러야 하는 번호의 좌표를 지정해 주고,
현재 각 손가락이 있는 곳에서 그 번호까지 얼마나 이동해야 하는지 계산 한뒤,
같은 숫자라면 어떤 손 잡이인지 판단해서 해당 손으로 누르도록 해줍니다.
else {
if (routeL < routeR) {
answer += 'L';
posL = [1, numC.indexOf(numbers[i])];
} else {
answer += 'R';
posR = [1, numC.indexOf(numbers[i])];
}
}
}
}
return answer
}
만약 두 값이 다르다면 숫자가 작은 쪽이 가까운 쪽이기 때문에
해당 손으로 누를 수 있도록 해줘서 문제를 해결했습니다.
결과
굉장히 시간을 많이 썼지만... 그래도 해냈습니다..!
Author And Source
이 문제에 관하여(프로그래머스 | 키패드 누르기_JS), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@sstaar91/Algorithm-Programmers-KeyPad저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)