728x90
전화 키패드에서 왼손과 오른손의 엄지손가락만을 이용해서 숫자만을 입력하려고 합니다.
맨 처음 왼손 엄지손가락은 * 키패드에 오른손 엄지손가락은 # 키패드 위치에서 시작하며, 엄지손가락을 사용하는 규칙은 다음과 같습니다.
- 엄지손가락은 상하좌우 4가지 방향으로만 이동할 수 있으며 키패드 이동 한 칸은 거리로 1에 해당합니다.
- 왼쪽 열의 3개의 숫자 1, 4, 7을 입력할 때는 왼손 엄지손가락을 사용합니다.
- 오른쪽 열의 3개의 숫자 3, 6, 9를 입력할 때는 오른손 엄지손가락을 사용합니다.
- 가운데 열의 4개의 숫자 2, 5, 8, 0을 입력할 때는 두 엄지손가락의 현재 키패드의 위치에서 더 가까운 엄지손가락을 사용합니다.4-1. 만약 두 엄지손가락의 거리가 같다면, 오른손잡이는 오른손 엄지손가락, 왼손잡이는 왼손 엄지손가락을 사용합니다.
순서대로 누를 번호가 담긴 배열 numbers, 왼손잡이인지 오른손잡이인 지를 나타내는 문자열 hand가 매개변수로 주어질 때, 각 번호를 누른 엄지손가락이 왼손인 지 오른손인 지를 나타내는 연속된 문자열 형태로 return 하도록 solution 함수를 완성해주세요.
function solution(numbers, hand) {
var answer = '';
var Left = [1,4,7,'*']
var Right = [3,6,9,'#']
var Center = [2,5,8,0]
var Current = {"L":3, "R":3, "LW":"L", "RW":"R", "hand":hand == 'right' ? 'R' : 'L' }
numbers.forEach((num, idx)=>{
if(Left.includes(num)){
Current.L = Left.indexOf(num)
Current.LW = "L"
answer += 'L'
}
else if(Right.includes(num)){
Current.R = Right.indexOf(num)
Current.RW = "R"
answer += 'R'
}
else if(Center.includes(num)){
let cidx = Center.indexOf(num)
let Rlength = 0
let Llength = 0
Current.LW == "C" ? Llength = Math.abs(cidx - Current.L) -1 : Llength = Math.abs(cidx - Current.L)
Current.RW == "C" ? Rlength = Math.abs(cidx - Current.R) -1 : Rlength = Math.abs(cidx - Current.R)
if(Rlength > Llength){
Current.LW = "C"
Current.L = Center.indexOf(num)
answer += 'L'
}else if(Rlength < Llength){
Current.RW = "C"
Current.R = Center.indexOf(num)
answer += 'R'
}else if(Rlength == Llength){
if(Current.hand == 'R'){
Current.RW = "C"
Current.R = Center.indexOf(num)
answer += 'R'
} else {
Current.LW = "C"
Current.L = Center.indexOf(num)
answer += 'L'
}
}
}
})
return answer;
}
728x90
'공부 > 알고리즘' 카테고리의 다른 글
숫자 문자열과 영단어 javascript (0) | 2023.09.03 |
---|---|
신규 아이디 추천 javascript (0) | 2023.09.03 |
크레인 인형뽑기 게임 javascript (0) | 2023.08.12 |
세 개의 구분자 javascript (0) | 2023.07.30 |
수열과 구간 쿼리 4 (0) | 2023.07.30 |