https://programmers.co.kr/learn/courses/30/lessons/67256
function distance(a, b){
return Math.abs(a[0]-b[0])+Math.abs(a[1]-b[1]);
}
function solution(numbers, hand) {
let answer='';
let handShort=hand[0].toUpperCase();
const pos={
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 posL=pos['*'];
let posR=pos['#'];
for(let i=0; i<numbers.length; i++){
if(numbers[i]%3===1){
answer+='L';
posL=pos[numbers[i]];
}
else if(numbers[i]%3===0 && numbers[i]!==0){
answer+='R';
posR=pos[numbers[i]];
}
else{
const leftDis=distance(pos[numbers[i]], posL);
const rightDis=distance(pos[numbers[i]], posR)
if(leftDis>rightDis){
answer+='R';
posR=pos[numbers[i]];
}
else if(leftDis<rightDis){
answer+='L';
posL=pos[numbers[i]];
}
else{
answer+=handShort;
if(handShort==='R') posR=pos[numbers[i]];
else if(handShort='L') posL=pos[numbers[i]];
}
}
}
return answer;
}
처음에는 어떻게 접근해야할지 막막해서, 구글링해서 해설을 봐도 모르겠더라... 영상 자료는 조금 낫지 않을까 싶어서 유튜브에서 해설영상을 봤다. 전체를 다 보진 않았고, 접근 방식만 파악했다.
객체를 사용해서 키패드 각각을 모두 좌표화 하고, (x1, x2)-(y1, y2) 사이의 거리를 |x1-x2|+|y1-y2|로 구할 수 있었다. 거리를 구하는 함수는 따로 만들어줬다.
복잡하고 어려워보이는 문제였지만, 원리를 파악하니까 그렇게 어렵지는 않았다. 객체 사용에 익숙해지자!
10/26
원리알면 차근차근 풀면 되는 문제! 다시 풀어보기