Today I Learned
Solve the algorithm questions.
performance summary
Memory: 10.3 MB, Time: 0.81 ms
division
Coding Test Practice > 2020 Kakao Internship
Scoring result
Accuracy: 100.0
Total: 100.0 / 100.0
problem description
The following numbers are written in each cell of the smartphone's phone keypad.

You want to enter only numbers on this phone keypad using only your left and right thumbs.
The thumb of the left hand starts at the * keypad and the thumb of the right hand starts at the # keypad position. The rules for using the thumb are as follows.
The thumb can only move in four directions, up, down, left, and right, and one keypad movement equals 1 distance.
Use your left thumb to enter the three numbers 1, 4, and 7 in the left column.
Use your right thumb to enter the three numbers 3, 6, and 9 in the right column.
When entering the four numbers 2, 5, 8, and 0 in the middle column, use the thumb that is closer to the current keypad position of the two thumbs.
4-1. If the two thumbs are the same distance apart, right-handers use the right thumb and left-handers use the left thumb.
When an array numbers containing the numbers to be pressed in sequence and a string hand indicating whether the person is left- or right-handed are given as parameters, the solution function is completed to return in the form of a continuous string indicating whether the thumb pressing each number is the left or right hand. Please.
[Restrictions]
The size of the numbers array must be between 1 and 1,000.
The values of the elements of the numbers array are integers between 0 and 9.
hand is either "left" or "right".
"left" means left-handed and "right" means right-handed.
If you used the left thumb, L, if you used the right thumb, connect R in order and return it in the form of a string.
I/O example

Description of the input/output example
I/O Example #1
The numbers to be pressed in sequence are [1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5], and you are right-handed.

So it returns "LRLLLRLLRRL".
I/O Example #2
If a left-hander presses [7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2] in that order, the used hand becomes "LRLLRRLLLLRR".
I/O Example #3
If a right-hander presses [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] in that order, the used hand becomes "LLRLLRLLRL".
My answer
def solution(numbers, hand):
result = ""
leftHand = 10
rightHand = 12
for i in range(len(numbers)):
if numbers[i] == 1:
leftHand = 1
result += "L"
elif numbers[i] == 4:
leftHand = 4
result += "L"
elif numbers[i] == 7:
leftHand = 7
result += "L"
elif numbers[i] == 3:
rightHand = 3
result += "R"
elif numbers[i] == 6:
rightHand = 6
result += "R"
elif numbers[i] == 9:
rightHand = 9
result += "R"
elif numbers[i] == 2:
leftHandNumber = numbers[i] - leftHand
rightHandNumber = numbers[i] - rightHand
if leftHandNumber < 0:
leftHandNumber = leftHandNumber * -1
if rightHandNumber < 0:
rightHandNumber = rightHandNumber * -1
leftdistance = (leftHandNumber % 3) + (leftHandNumber // 3)
rightdistance = (rightHandNumber % 3) + (rightHandNumber // 3)
if leftdistance > rightdistance:
rightHand = numbers[i]
result += "R"
elif leftdistance < rightdistance:
leftHand = numbers[i]
result += "L"
elif leftdistance == rightdistance:
if hand == "right":
rightHand = numbers[i]
result += "R"
else:
leftHand = numbers[i]
result += "L"
elif numbers[i] == 5:
leftHandNumber = numbers[i] - leftHand
rightHandNumber = numbers[i] - rightHand
if leftHandNumber < 0:
leftHandNumber = leftHandNumber * -1
if rightHandNumber < 0:
rightHandNumber = rightHandNumber * -1
leftdistance = (leftHandNumber % 3) + (leftHandNumber // 3)
rightdistance = (rightHandNumber % 3) + (rightHandNumber // 3)
if leftdistance > rightdistance:
rightHand = numbers[i]
result += "R"
elif leftdistance < rightdistance:
leftHand = numbers[i]
result += "L"
elif leftdistance == rightdistance:
if hand == "right":
rightHand = numbers[i]
result += "R"
else:
leftHand = numbers[i]
result += "L"
elif numbers[i] == 8:
leftHandNumber = numbers[i] - leftHand
rightHandNumber = numbers[i] - rightHand
if leftHandNumber < 0:
leftHandNumber = leftHandNumber * -1
if rightHandNumber < 0:
rightHandNumber = rightHandNumber * -1
leftdistance = (leftHandNumber % 3) + (leftHandNumber // 3)
print(leftdistance)
rightdistance = (rightHandNumber % 3) + (rightHandNumber // 3)
print(rightdistance)
if leftdistance > rightdistance:
rightHand = numbers[i]
result += "R"
elif leftdistance < rightdistance:
leftHand = numbers[i]
result += "L"
elif leftdistance == rightdistance:
if hand == "right":
rightHand = numbers[i]
result += "R"
else:
leftHand = numbers[i]
result += "L"
elif numbers[i] == 0:
numbers[i] = 11
leftHandNumber = numbers[i] - leftHand
rightHandNumber = numbers[i] - rightHand
if leftHandNumber < 0:
leftHandNumber = leftHandNumber * -1
if rightHandNumber < 0:
rightHandNumber = rightHandNumber * -1
leftdistance = (leftHandNumber % 3) + (leftHandNumber // 3)
rightdistance = (rightHandNumber % 3) + (rightHandNumber // 3)
if leftdistance > rightdistance:
rightHand = numbers[i]
result += "R"
elif leftdistance < rightdistance:
leftHand = numbers[i]
result += "L"
elif leftdistance == rightdistance:
if hand == "right":
rightHand = numbers[i]
result += "R"
else:
leftHand = numbers[i]
result += "L"
return result
It was not too hard to understand, but one thing was difficult, it was calculate distance. and I also want to make short code do not want to use the repeating code. However, It is not java so kind of complicated. I will try it later.