코딩테스트

[프로그래머스][KAKAO_인턴][2020] 키패드 누르기

pythaac 2021. 9. 6. 21:19
프로그래머스 코딩테스트 고득점 Kit의 문제입니다.

https://programmers.co.kr/learn/challenges?tab=algorithm_practice_kit

 

코딩테스트 연습

기초부터 차근차근, 직접 코드를 작성해 보세요.

programmers.co.kr

 

문제

https://programmers.co.kr/learn/courses/30/lessons/67256

 

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

[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 click(hand, keypad, number, left, right):
    distance_left = sum(abs(a-b) for a, b in zip(left, keypad[number]))
    distance_right = sum(abs(a-b) for a, b in zip(right, keypad[number]))
    if distance_left < distance_right or (distance_left == distance_right and hand == "left"):
        return "L", keypad[number], right
    else:
        return "R", left, keypad[number]

def solution(numbers, hand):
    answer = []
    keypad = [(3, 1), (0, 0), (0 ,1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2), (2, 3)]
    left = (3, 0)
    right = (3, 2)
    for num in numbers:
        # left
        if num in [1, 4, 7]:
            answer.append("L")
            left = keypad[num]
        #right
        elif num in [3, 6, 9]:
            answer.append("R")
            right = keypad[num]
        # left or right
        else:
            res, left, right = click(hand, keypad, num, left, right)
            answer.append(res)

    return ''.join(answer)
  • 좌표
    • 키패드를 인덱스로 상응하는 좌표 배열 저장
    • 2,5,8,0일 경우 멘하탄 거리 + hand로 손 결정

 

다른 사람이 작성한 코드

None

 

기억해야할 것

  • 간단한 문제였다!