230111 TIL

William Parker·2023년 1월 10일

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.

profile
Developer who does not give up and keeps on going.

0개의 댓글