🤔 문제


https://programmers.co.kr/learn/courses/30/lessons/67256?language=python3 

 

코딩테스트 연습 - 키패드 누르기

[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"

programmers.co.kr

 

😀 풀이


간단한 구현 문제라 가벼운 설명과 코드만 첨부하겠습니다.

문제 조건에 맞게 눌러야 하는 손을 정해주고 누른 후 해당 손의 위치를 바꿔주며 답을 만들어 나가면 되는 문제였습니다!

 

💻 풀이 코드는 아래와 같습니다.

 

def solution(numbers, hand):
    answer = ''
    leftHand, rightHand = [0, 3], [2, 3]
    keyPadMap = dict()
    keyPadMap[0] = [1, 3]
    
    for i in range(1, 10):
        keyPadMap[i] = [(i - 1) % 3, (i - 1) // 3]
    
    leftNumbers = [1,4,7]
    rightNumbers = [3,6,9]

    for number in numbers:
        if number in leftNumbers:
            answer += "L"
            leftHand = keyPadMap[number]
        elif number in rightNumbers:
            answer += "R"
            rightHand = keyPadMap[number]
        else:
            x, y = keyPadMap[number]
            leftDist = abs(leftHand[0] - x) + abs(leftHand[1] - y)
            rightDist = abs(rightHand[0] - x) + abs(rightHand[1] - y)
            # 가까운거 체크
            if leftDist > rightDist or (leftDist == rightDist and hand == "right"):
                answer += "R"
                rightHand = [x, y]
            elif rightDist > leftDist or (leftDist == rightDist and hand == "left"):
                answer += "L"
                leftHand = [x, y]
    return answer
반응형
복사했습니다!