코딩테스트 공부
[프로그래머스] 키패드 누르기 - 자바스크립트
codevil
2022. 7. 18. 21:22
https://school.programmers.co.kr/learn/courses/30/lessons/67256
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
별로 좋아하는 방식은 아니지만 하드코딩을 이용하여 풀었다.
1-1 x, y에 알맞게 번호와 문자를 배치한다.
1-2 return할 result를 만든다.
1-3 left와 right의 초기값을 만든다
const list = { 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 result = ""
let [left, right] = ["*", "#"]
2-1 주어진 numbers에서 map을 사용하여 값에 한개씩 접근한다
2-2-1 x값이 0이면 left, 2이면, right로 값을 바꾼다
2-2-2 result에 2-2-1의 첫글자를 붙인다 (예시 : result = result + "L")
2-2-3 2-2-1에 해당하지 않는 경우에는, 현재 값과-left의 값, 현재값 - right 값을 비교해서 더 작은 값(절대값 기준)을 기준으로 2-2-1, 2-2-2를 접근한다.
2-2-4 만일 값이 같다고하면 왼손잡이면, 왼손에 붙이고, 오른손 잡이면 오른손에 붙인다.
numbers.map((element)=>{
if(list[element][1]===0){
left = element;
result = result + "L"
return
}else if(list[element][1]===2){
right = element;
result = result + "R"
return
}
const leftDistance = Math.abs(list[element][0]-list[left][0]) +
Math.abs(list[element][1]-list[left][1])
const rightDistance = Math.abs(list[element][0]-list[right][0]) +
Math.abs(list[element][1]-list[right][1])
if(rightDistance>leftDistance){
left = element
result = result + "L"
}else if(leftDistance>rightDistance){
right = element
result = result + "R"
}else{
if(hand ==="right"){
right= element
result = result + "R"
}else{
left = element
result = result + "L"
}
}
})
전체풀이
function solution(numbers, hand) {
const list = { 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 result = ""
let [left, right] = ["*", "#"]
numbers.map((element)=>{
if(list[element][1]===0){
left = element;
result = result + "L"
return
}else if(list[element][1]===2){
right = element;
result = result + "R"
return
}
const leftDistance = Math.abs(list[element][0]-list[left][0]) +
Math.abs(list[element][1]-list[left][1])
const rightDistance = Math.abs(list[element][0]-list[right][0]) +
Math.abs(list[element][1]-list[right][1])
if(rightDistance>leftDistance){
left = element
result = result + "L"
}else if(leftDistance>rightDistance){
right = element
result = result + "R"
}else{
if(hand ==="right"){
right= element
result = result + "R"
}else{
left = element
result = result + "L"
}
}
})
return result
}