function solution(numbers, hand) {
let answer = '';
let leftHand = 10;
let rightHand = 12;
let whatHand = hand == "left" ? 'L':'R';
for (var i in numbers){
if(numbers[i] == 1 || numbers[i] == 4 || numbers[i] == 7){
leftHand = numbers[i];
answer = answer + 'L'
}else if(numbers[i] == 3 || numbers[i] == 6 || numbers[i] == 9){
rightHand = numbers[i];
answer = answer + 'R'
}else{
// 각 키패드의 좌표를 객체로 만들기
const numXY =
{1:[1,1],2:[2,1],3:[3,1],4:[1,2],5:[2,2],6:[3,2],7:[1,3],8:[2,3],9:[3,3],10:[1,4],0:[2,4],12:[3,4]};
// 두 키패드 사이의 거리 = 절댓값(이동하려는 위치(x,y) - 현재 왼손위치(x,y))
let leftDistance = Math.abs(numXY[numbers[i]][0]-numXY[leftHand][0]) + Math.abs(numXY[numbers[i]][1]-numXY[leftHand][1])
// 두 키패드 사이의 거리 = 절댓값(이동하려는 위치(x,y) - 현재 오른손위치(x,y))
let RightDistance = Math.abs(numXY[numbers[i]][0]-numXY[rightHand][0]) + Math.abs(numXY[numbers[i]][1]-numXY[rightHand][1])
// 오른쪽이 짧을 경우
if(leftDistance>RightDistance){
rightHand = numbers[i];
answer = answer + 'R'
// 왼쪽이 짧을 경우
}else if(leftDistance<RightDistance){
leftHand = numbers[i];
answer = answer + 'L'
// 양쪽 거리가 같을 경우
}else{
answer = answer + whatHand;
whatHand == 'R' ? rightHand = numbers[i] : leftHand = numbers[i];
}
}
}
return answer;
}
내가 문제를 풀었던 프로세스 :
1_) 1,4,7이 나오는 경우에는 왼손, 3,6,9가 나오는 경우에는 오른손으로 클릭하게 만들기:
->leftHand = numbers[i];
answer = answer + 'L'
->rightHand = numbers[i];
answer = answer + 'R'
2_) 2,5,8,0이 나오는 경우에는 현재 위치에서 옮겨야 할 버튼의 위치의 절댓값을 구하기:
1)키패드의 번호들에 각각의 x,y좌표를 부여하기
->const numXY =
{1:[1,1],2:[2,1],3:[3,1],
4:[1,2],5:[2,2],6:[3,2],
7:[1,3],8:[2,3],9:[3,3],
10:[1,4],0:[2,4],12:[3,4]};
2)현재 위치에서 움직이려는 위치 사이에서의 거리 구하기
-> // 두 키패드 사이의 거리 = 절댓값(이동하려는 위치(x,y) - 현재 왼손위치(x,y))
let leftDistance = Math.abs(numXY[numbers[i]][0]-numXY[leftHand][0]) + Math.abs(numXY[numbers[i]][1]-numXY[leftHand][1])
// 두 키패드 사이의 거리 = 절댓값(이동하려는 위치(x,y) - 현재 오른손위치(x,y))
let RightDistance = Math.abs(numXY[numbers[i]][0]-numXY[rightHand][0]) + Math.abs(numXY[numbers[i]][1]-numXY[rightHand][1])
3)각각의 거리 값을 비교하기 (왼쪽이 더 클 때, 오른쪽이 더 클 때, 둘 다 같을 때)
-> // 오른쪽이 짧을 경우
if(leftDistance>RightDistance){
rightHand = numbers[i];
answer = answer + 'R'
// 왼쪽이 짧을 경우
}else if(leftDistance<RightDistance){
leftHand = numbers[i];
answer = answer + 'L'
// 양쪽 거리가 같을 경우
}else{
answer = answer + whatHand;
whatHand == 'R' ? rightHand = numbers[i] : leftHand = numbers[i];
}
키패드를 x,y좌표로 구할 생각을 해내서, 스스로 뿌듯했던 문제. 다른 사람들의 풀이를 보고 나만 생각한건 아니었구나 깨달았던 문제.
'코딩테스트' 카테고리의 다른 글
[프로그래머스] 다트게임 (0) | 2021.05.27 |
---|---|
[프로그래머스] 두 개 뽑아서 더하기 (0) | 2021.05.25 |
[프로그래머스] 음양 더하기 (0) | 2021.05.20 |
[프로그래머스] 신규 아이디 (0) | 2021.05.18 |
[프로그래머스] 체육복 문제풀이 (0) | 2021.05.17 |