LV1. [2020 KACA実習]キーボードを押す
9826 ワード
[Kaka実習生]キーボードを押す
https://programmers.co.kr/learn/courses/30/lessons/67256#
問題の説明
この電話のキーボードに数字を入力したいのですが、左手と右手の親指しか使いません.
最初の左手親指は*
右手親指は#
キーボードの位置から始まり、ルールは以下の通りです.
この電話のキーボードに数字を入力したいのですが、左手と右手の親指しか使いません.
最初の左手親指は
*
右手親指は#
キーボードの位置から始まり、ルールは以下の通りです.2つの親指の距離が等しい場合は、右利きは右手親指、左利きは左手親指を使用します.
せいげんじょうけん
I/O例
コード#コード# import math
#손가락과 입력숫자의 거리를 구해주는 함수
def getDistance(num, finger):
return abs(num[0]-finger[0]) + abs(num[1]-finger[1])
def solution(numbers, hand):
answer = ''
#오른손잡이인지 왼손잡이인지 간편하게 비교하기위해.
hand = hand[0].upper()
#손의 처음위치를 정수로 치환한다.
left = 10
right = 12
#각 숫자의 좌표를 Dic형으로 입력하고, 예외 숫자를 초기화해준다.
dic = {}
dic[0] = [4, 2]
dic[10] = [4, 1]
dic[12] = [4, 3]
# 2중 반복문이지만, 1~9까지기때문에 O(9)이라고 할 수 있다.
for i in range(1, 4):
for j in range(1, 4):
dic[(i-1)*3+j] = [i, j]
for num in numbers: # O(N)
#기본 정해진 왼손과 오른손의 위치일 때
if(num % 3 == 1):
answer += 'L'
left = num
elif(num % 3 == 0 and num > 0):
answer += 'R'
right = num
#2, 5, 8, 0과 같은 가운데 위치일 때
else:
#왼손과 오른손의 입력숫자와의 거리 비교 후 가까운 손으로 입력한다.
left_distance = getDistance(dic[num], dic[left])
right_distance = getDistance(dic[num], dic[right])
if(left_distance < right_distance):
answer += 'L'
left = num
elif(left_distance > right_distance):
answer += 'R'
right = num
else:
if(hand == 'L'):
answer += 'L'
left = num
else:
answer += 'R'
right = num
return answer
Reference
この問題について(LV1. [2020 KACA実習]キーボードを押す), 我々は、より多くの情報をここで見つけました
https://velog.io/@jo1132/LV1.-2020-카카오-인턴십-키패드-누르기
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
import math
#손가락과 입력숫자의 거리를 구해주는 함수
def getDistance(num, finger):
return abs(num[0]-finger[0]) + abs(num[1]-finger[1])
def solution(numbers, hand):
answer = ''
#오른손잡이인지 왼손잡이인지 간편하게 비교하기위해.
hand = hand[0].upper()
#손의 처음위치를 정수로 치환한다.
left = 10
right = 12
#각 숫자의 좌표를 Dic형으로 입력하고, 예외 숫자를 초기화해준다.
dic = {}
dic[0] = [4, 2]
dic[10] = [4, 1]
dic[12] = [4, 3]
# 2중 반복문이지만, 1~9까지기때문에 O(9)이라고 할 수 있다.
for i in range(1, 4):
for j in range(1, 4):
dic[(i-1)*3+j] = [i, j]
for num in numbers: # O(N)
#기본 정해진 왼손과 오른손의 위치일 때
if(num % 3 == 1):
answer += 'L'
left = num
elif(num % 3 == 0 and num > 0):
answer += 'R'
right = num
#2, 5, 8, 0과 같은 가운데 위치일 때
else:
#왼손과 오른손의 입력숫자와의 거리 비교 후 가까운 손으로 입력한다.
left_distance = getDistance(dic[num], dic[left])
right_distance = getDistance(dic[num], dic[right])
if(left_distance < right_distance):
answer += 'L'
left = num
elif(left_distance > right_distance):
answer += 'R'
right = num
else:
if(hand == 'L'):
answer += 'L'
left = num
else:
answer += 'R'
right = num
return answer
Reference
この問題について(LV1. [2020 KACA実習]キーボードを押す), 我々は、より多くの情報をここで見つけました https://velog.io/@jo1132/LV1.-2020-카카오-인턴십-키패드-누르기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol