[プログラマー/Javascript]52秘密の地図
13265 ワード
問題の説明
スマートフォンの電話キーボードの各スペースには、次の数字があります.
この電話のキーボードには、左手と右手の親指で数字を入力したいだけです.
最初の左手親指は*キーボードから始まり、右手親指は#キーボードの位置から始まり、親指を使うルールは以下の通りです.
1
、4
を入力する場合は、左手親指を使用してください.7
、3
および6
を入力する場合は、右手親指を使用してください.9
、2
、5
、8
および0
を入力する場合は、2つの親指の現在のキーボード位置に近い親指を使用します.4-1. 両亲指の距离が等しい场合は、右利きは右手亲指、左利きは左手亲指を使います.
numbers
、左利きか右利きかを示す文字列hand
をパラメータとして与えると、各番号の親指が左手か右手かを示す連続文字列形式solution
関数が返されます.せいげんじょうけん
-「左」は左利き、「右」は右利き.
I/O例
numbershandresult[1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5]"right""LRLLLRLLRRL"[7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2]"left""LRLLRRLLLRR"[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]"right""LLRLLRLLRL"
に答える
let num = [[1, 4, 7, '*'],[2, 5, 8, 0],[3, 6, 9, '#']] //번호를 '열' 기준으로 2차원 배열
function distance(now, end){ // 현재 위치와 목적위치를 파라미터로 받는 거리계산 함수
let count = 0
let now_place = num.indexOf(num.find(a=>a.includes(now)))
let end_place = num.indexOf(num.find(a=>a.includes(end))) // 현재 위치와 목적 위치의 num 인덱스(열)을 구한다.
let col_dis = Math.abs(num[end_place].indexOf(end) - num[now_place].indexOf(now)) // 행 간의 길이
let row_dis = Math.abs(end_place - now_place) // 열 간의 길이
if(now_place == end_place) {
return col_dis // 열이 서로 같다면 행 간의 길이만 return
}
else{
return row_dis + col_dis // 열이 서로 다르다면 열 간의 길이 + 행 간의 길이를 총 길이로 return
}
}
function solution(numbers, hand) {
let left = '*'
let right = '#' // 첫 위치 설정
let answer = ''
for(let i = 0; i < numbers.length; i++){
let t = numbers[i]
if(t % 3 == 0 && t !== 0){ // 0을 제외하고 나머지가 0일 경우 오른손 위치 이동 및 'R' 추가
right = t
answer += 'R'
} else if(t % 3 == 1){ // 나머지 1일 경우 왼손 위치 이동 및 'L' 추가
left = t
answer += 'L'
} else if(t % 3 == 2 || t == 0){ // 0이거나 나머지가 2일 경우
if(distance(left, t) < distance(right, t)){
left = t
answer += 'L'
} else if(distance(left, t) > distance(right, t)){
right = t
answer += 'R' // 거리 함수 비교
} else if(distance(left, t) == distance(right, t)){
if(hand == "right"){ // 같을 경우 왼손잡이 오른손잡이 확인
right = t
answer += 'R'
}else{
left = t
answer += 'L'
}
}
}
}
return answer
}
説明:
この問題の解答はかなり長いので、すべての状況の数を考えると、そうらしい.各数値を列ごとに含む2 D配列を宣言し、始点と終点の距離を求める関数を確立します.そしてforゲートを回り、状況の数を一つ一つ考えました.
Reference
この問題について([プログラマー/Javascript]52秘密の地図), 我々は、より多くの情報をここで見つけました https://velog.io/@ricky0813/프로그래머스Javascript-52.-비밀지도テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol