[프로그래머스] 코딩테스트 - [카카오 인턴] 키패드 누르기 (Javascript)
2425 단어 JavaScript알고리즘JavaScript
문제
출처 : https://programmers.co.kr/learn/courses/30/lessons/67256
풀이
function solution(numbers, hand) {
let answer = "";
// 전화 키패드를 2차원 배열화하여 각 인덱스 정보를 key를 통해 알아낼 수 있도록 객체로 선언
const keys = {
1: [0, 0],
2: [0, 1],
3: [0, 2],
4: [1, 0],
5: [1, 1],
6: [1, 2],
7: [2, 0],
8: [2, 1],
9: [2, 2],
"*": [3, 0],
0: [3, 1],
"#": [3, 2],
};
// 왼손은 키패드 * 위에서 시작하고 오른손은 키패드 # 위에서 시작
let leftHand = keys["*"];
let rightHand = keys["#"];
// 눌러야 되는 키패드의 개수만큼 for문을 돈다
for (let i = 0; i < numbers.length; i++) {
// 현재 눌러야되는 키패드를 변수에 담는다
const target = numbers[i];
// 키패드가 1, 4, 7 중에 하나면 answer에 'L'을 더해주고 왼손은 방금 누른 키패드로 이동시킨다
if (target === 1 || target === 4 || target === 7) {
answer += "L";
leftHand = keys[target];
}
// 키패드가 3, 6, 9 중에 하나면 answer에 'R'을 더해주고 오른손은 방금 누른 키패드로 이동시킨다
else if (target === 3 || target === 6 || target === 9) {
answer += "R";
rightHand = keys[target];
}
// 키패드가 2, 5, 8, 0 중에 하나인 경우
else {
// L과 타겟 키패드의 거리와 R과 타겟 키패드의 거리를 위의 거리구하는 함수를 이용해 변수에 담는다
const distanceL = getDistance(leftHand, keys[target]);
const distanceR = getDistance(rightHand, keys[target]);
// 왼손과의 거리가 오른손과의 거리보다 클 경우
if (distanceR < distanceL) {
answer += "R";
rightHand = keys[target];
}
// 오른손과의 거리가 왼손과의 거리보다 클 경우
if (distanceR > distanceL) {
answer += "L";
leftHand = keys[target];
}
// 오른손과의 거리와 왼손과의 거리가 같은 경우
if (distanceR === distanceL) {
// 오른손잡이일 경우
if (hand === "right") {
answer += "R";
rightHand = keys[target];
}
// 왼손잡이일 경우
if (hand === "left") {
answer += "L";
leftHand = keys[target];
}
}
}
}
return answer;
}
Author And Source
이 문제에 관하여([프로그래머스] 코딩테스트 - [카카오 인턴] 키패드 누르기 (Javascript)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@lgs2722/프로그래머스-코딩테스트-카카오-인턴-키패드-누르기-Javascript
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
function solution(numbers, hand) {
let answer = "";
// 전화 키패드를 2차원 배열화하여 각 인덱스 정보를 key를 통해 알아낼 수 있도록 객체로 선언
const keys = {
1: [0, 0],
2: [0, 1],
3: [0, 2],
4: [1, 0],
5: [1, 1],
6: [1, 2],
7: [2, 0],
8: [2, 1],
9: [2, 2],
"*": [3, 0],
0: [3, 1],
"#": [3, 2],
};
// 왼손은 키패드 * 위에서 시작하고 오른손은 키패드 # 위에서 시작
let leftHand = keys["*"];
let rightHand = keys["#"];
// 눌러야 되는 키패드의 개수만큼 for문을 돈다
for (let i = 0; i < numbers.length; i++) {
// 현재 눌러야되는 키패드를 변수에 담는다
const target = numbers[i];
// 키패드가 1, 4, 7 중에 하나면 answer에 'L'을 더해주고 왼손은 방금 누른 키패드로 이동시킨다
if (target === 1 || target === 4 || target === 7) {
answer += "L";
leftHand = keys[target];
}
// 키패드가 3, 6, 9 중에 하나면 answer에 'R'을 더해주고 오른손은 방금 누른 키패드로 이동시킨다
else if (target === 3 || target === 6 || target === 9) {
answer += "R";
rightHand = keys[target];
}
// 키패드가 2, 5, 8, 0 중에 하나인 경우
else {
// L과 타겟 키패드의 거리와 R과 타겟 키패드의 거리를 위의 거리구하는 함수를 이용해 변수에 담는다
const distanceL = getDistance(leftHand, keys[target]);
const distanceR = getDistance(rightHand, keys[target]);
// 왼손과의 거리가 오른손과의 거리보다 클 경우
if (distanceR < distanceL) {
answer += "R";
rightHand = keys[target];
}
// 오른손과의 거리가 왼손과의 거리보다 클 경우
if (distanceR > distanceL) {
answer += "L";
leftHand = keys[target];
}
// 오른손과의 거리와 왼손과의 거리가 같은 경우
if (distanceR === distanceL) {
// 오른손잡이일 경우
if (hand === "right") {
answer += "R";
rightHand = keys[target];
}
// 왼손잡이일 경우
if (hand === "left") {
answer += "L";
leftHand = keys[target];
}
}
}
}
return answer;
}
Author And Source
이 문제에 관하여([프로그래머스] 코딩테스트 - [카카오 인턴] 키패드 누르기 (Javascript)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@lgs2722/프로그래머스-코딩테스트-카카오-인턴-키패드-누르기-Javascript저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)