728x90
반응형
🚨문제
https://programmers.co.kr/learn/courses/30/lessons/67256?language=javascript
🔅예제 이해
이해가 크게 어렵지 않아서 생략하겠다.
numbers순서에 따라서 직접 버튼을 치듯이 예제를 해보면 되는데..
이게 어렵진 않은데, 중간에 꼬이면 꼬이는 거라.. 신중히.. 해보자
☺️나의 코드
function solution(numbers, hand) {
//왼손으로 쳐야하는 숫자
const left = [1, 4, 7]
//오른손으로 쳐야하는 숫자
const right = [3, 6, 9]
//오른손잡이 ? 왼손잡이 => R ? L로 변환
const handCustom = hand.substring(0,1).toUpperCase();
//현재 손의 위치를 선언한다.
var leftLocation = "*";
var rightLocation = "#";
//눌러야 하는 숫자와의 거리를 확인하는 함수를 생성한다.
function findDistance(handNumber, nextNumber){
//각 키패드를 (y,x)값으로 설정한다.
let keypad = {1:[0,0], 2:[1,0],3:[2,0],
4:[0,1], 5:[1,1], 6:[2,1],
7:[0,2], 8:[1,2], 9:[2,2],
"*":[0,3], 0:[1,3], "#":[2,3]
}
//누르고 있는 번호
let [x1, y1] = keypad[handNumber];
//누를 번호
let [x2, y2] = keypad[nextNumber];
//거리 구하는 법 : 거리를 구한 값을 abs로 절대값으로 만든다음 x,y거리를 합친다.
return Math.abs(x1 - x2) + Math.abs(y1 - y2);
}
//reduce함수를 이용해서 변수 선언없이 result에 쌓아준다.
var answer = numbers.reduce((result, number, index)=>{
//만약 누를 숫자가 왼손으로 눌러야 하는 경우
if(left.includes(number) ){
//결과에 L를 추가한다.
result.push("L");
//왼손이 해당 숫자를 눌렀다고 현재 손의 위치를 업데이트 해준다.
leftLocation = number;
}else if(right.includes(number)){ //만약 누를 숫자가 오른손으로 눌러야 하는 경우
result.push("R");
rightLocation = number;
}else{ //2,5,8,0의 숫자를 눌러야 할 경우
//현재 왼손이 누르고 있는 것과 눌러야 하는 것의 거리
var closeLeft = findDistance(leftLocation, number);
//현재 오른손이 누르고 있는 것과 눌러야 하는 것의 거리
var closeRight = findDistance(rightLocation, number);
//만약에 거리가 같으면 자주 사용하는 손잡이를 사용한다.
if (closeLeft == closeRight){
result.push(handCustom);
if(handCustom == "L"){
leftLocation = number;
}else{
rightLocation = number;
}
}else if(closeLeft < closeRight){
result.push("L");
leftLocation = number;
}else{
result.push("R");
rightLocation = number;
}
}
return result;
} ,[]);
//join매서드로 배열을 문자열로 바꾼다.
answer = answer.join("");
return answer;
}
😎알고리즘 분석
- 왼손/오른손이 칠 숫자 지정
- 어느 손잡이?인지 사용하기 편하게 수정
- x,y좌표로 거리 구하는 함수 생성
- reduce를 이용해서 결과값을 result에 담아주기
❤️배운 점
눌러야 하는 숫자와의 거리를 확인하는 방법을 몰라서, 결국 찾아봐서 해결했다.
x,y좌표값으로 json타입으로 작성해서! 절대값으로 계산할 것!
다음엔 꼭 잊지말자!!
거리 구할땐, 좌표값으로 x,y둘다 거리 비교!!!!
.reduce((result, number, index)=>
if()
)
이렇게 쓰면 오류가 나는데, if()문을 쓰면 {~}에 적어주어야 한다.
728x90
반응형