[프로그래머스] 키패드 누르기 (javascript)
728x90
반응형
현재 풀이
function solution(numbers, hand) {
const phone={
};
for(let i=0;i<9;i++){
phone[i+1]=[parseInt(i/3),i%3];
}
phone["*"]=[3,0];
phone[0]=[3,1];
phone["#"]=[3,2];
var answer = '';
let left=phone["*"];
let right=phone["#"];
for(let i=0;i<numbers.length;i++){
let cur=numbers[i];
if(cur===1 || cur===4 || cur===7){
answer+='L';
left=phone[cur];
}else if(cur===3 || cur===6 || cur===9){
answer+='R';
right=phone[cur];
}else{
let [y,x]=phone[cur];
let ldiff=Math.abs(y-left[0])+Math.abs(x-left[1]);
let rdiff=Math.abs(y-right[0])+Math.abs(x-right[1]);
if(ldiff>rdiff){
answer+='R';
right=phone[cur];
}else if(ldiff<rdiff){
answer+='L';
left=phone[cur];
}else{
if(hand==="left"){
answer+="L";
left=phone[cur];
}else{
answer+="R";
right=phone[cur];
}
}
}
}
return answer;
}
--- 이전 풀이
아주 용썼다...
각 숫자의 키패드의 위치를 배열에 저장하여 객체에 집어 넣은 후 거리를 계산한다.
function solution(numbers, hand) {
const keypad={};
let start=1;//0=>11
for(let i=0;i<4;i+=1){
for(let j=0;j<3;j+=1){
keypad[start++]=[i,j];
}
}
var answer = '';
let left=keypad[10];//*
let right=keypad[12];//#
for(let i=0;i<numbers.length;i+=1){
let current=+numbers[i];
if(current===0)current=11;
if(keypad[current][1]===0){
answer+='L';
}else if(keypad[current][1]===2){
answer+='R';
}
else{
let left_sum=Math.abs(left[0]-keypad[current][0])+Math.abs(left[1]-keypad[current][1]);
let right_sum=Math.abs(right[0]-keypad[current][0])
+Math.abs(right[1]-keypad[current][1]);
if(left_sum<right_sum){
answer+='L';
}else if(left_sum>right_sum){
answer+='R';
}else{
if(hand==='left'){
answer+='L';
}else {answer+='R';}
}
}
if(answer[i]=='L'){
left=keypad[current];
}else{
right=keypad[current];
}
}
return answer;
}
728x90
반응형
'프로그래머스' 카테고리의 다른 글
[프로그래머스] 실패율 (javascript) (0) | 2021.03.02 |
---|---|
[프로그래머스] 신규 아이디 추천 ( javascript) (0) | 2021.03.02 |
[프로그래머스] 제일 작은 수 제거하기 (javascript) (0) | 2021.01.27 |
[프로그래머스] 시저 암호 (javascript) (0) | 2021.01.23 |
[프로그래머스] 수박수박수박수박수박수? (javascript) (0) | 2021.01.23 |
TAGS.