반응형
문제 출처
https://school.programmers.co.kr/learn/courses/30/lessons/67256
문제 풀이 힌트
- 키패드를 그래프로 표현하기
- 현재 손가락 위치 계속 체크
- 주어진 숫자랑, 왼손 오른손과의 거리를 구하는 함수
- 왼쪽일때 (1,3,7), 오른쪽일때(3,6,9), 가운데일때(2,5,8,0) 행위 구분
문제 풀이 코드
function solution(numbers, hand) {
// 결과 문자열을 저장할 변수
let answer = '';
// 두 손가락의 위치와 목표 숫자의 위치를 받아, 두 손가락의 거리를 계산하고
// 가까운 손가락을 반환하는 함수
function dis(lH, rH, num, pos) {
// 왼손가락과 목표 숫자 간의 거리 계산
const leftDis = Math.abs(pos[lH][0] - pos[num][0]) + Math.abs(pos[lH][1] - pos[num][1]);
// 오른손가락과 목표 숫자 간의 거리 계산
const rightDis = Math.abs(pos[rH][0] - pos[num][0]) + Math.abs(pos[rH][1] - pos[num][1]);
// 거리가 같을 경우, 사용자의 손잡이(hand) 선호에 따라 반환
if (leftDis === rightDis) return hand === 'left' ? 'L' : 'R';
// 왼손가락이 가까운 경우 'L', 오른손가락이 가까운 경우 'R'을 반환
return leftDis < rightDis ? 'L' : 'R';
}
// 키패드의 각 숫자 위치를 저장하는 객체
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 lH = '*', rH = '#';
// 입력된 숫자 배열을 순회하면서 각각의 숫자에 대해 처리
for (let num of numbers) {
if (num % 3 === 1) { // 숫자가 1, 4, 7 중 하나인 경우
answer += 'L'; // 왼손으로 누름
lH = num; // 왼손가락의 위치를 현재 숫자로 업데이트
} else if (num % 3 === 0 && num !== 0) { // 숫자가 3, 6, 9 중 하나인 경우
answer += 'R'; // 오른손으로 누름
rH = num; // 오른손가락의 위치를 현재 숫자로 업데이트
} else { // 숫자가 2, 5, 8, 0 중 하나인 경우
let temp = dis(lH, rH, num, pos); // 두 손가락과 숫자 간의 거리 비교
answer += temp; // 가까운 손가락을 결과 문자열에 추가
// 가까운 손가락의 위치를 현재 숫자로 업데이트
temp === 'L' ? lH = num : rH = num;
}
}
return answer; // 결과 문자열 반환
}
Only 풀이 코드
function solution(numbers, hand) {
let answer = '';
function dis(lH, rH, num, pos){
const leftDis = Math.abs(pos[lH][0] - pos[num][0]) + Math.abs(pos[lH][1] - pos[num][1]);
const rightDis = Math.abs(pos[rH][0] - pos[num][0]) + Math.abs(pos[rH][1] - pos[num][1]);
if (leftDis === rightDis) return hand === 'left' ? 'L' : 'R';
return leftDis < rightDis ? 'L' : 'R'
}
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 lH = '*', rH='#';
for(let num of numbers){
if(num%3 === 1){
answer+='L';
lH = num;
}else if(num%3 === 0 && num !== 0){
answer+='R'
rH = num;
}else{
let temp = dis(lH, rH, num, pos);
answer += temp;
temp === 'L' ? lH = num : rH = num;
}
}
return answer;
}
반응형
'알고리즘 문제 풀기' 카테고리의 다른 글
프로그래머스: 오픈채팅방 - javascript(replace, Map, switch) (0) | 2024.04.09 |
---|---|
프로그래머스: [3차] N진수 게임 - javascript(toString, toUpperCase()) (0) | 2024.04.08 |
프로그래머스 : [1차] 비밀지도 - javascript(toString(), padStart()) (0) | 2024.04.05 |
이진수 함수 dfs로 구현하기 (0) | 2024.04.05 |
프로그래머스: 크레인 인형뽑기 게임 - javascript (구현) (0) | 2024.04.04 |