생각과 고민이 담긴 코드

프로그래머스 - 키패드 누르기 ( 2020 카카오 인턴십) / Level 1 본문

Algorithm/프로그래머스

프로그래머스 - 키패드 누르기 ( 2020 카카오 인턴십) / Level 1

0_Hun 2022. 1. 3. 22:05

문제 : 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 solution(numbers, hand):
    answer = ''
    
    key_pad = [[1, 2, 3], [4, 5, 6], [7, 8, 9], ['*', 0, '#']]
    left_side = [1, 4, 7]
    right_side = [3, 6, 9]
    center = [2, 5, 8, 0]
    
    left = [3, 0]
    right = [3, 2]
    
    for num in numbers:
        if num in left_side:
            answer += 'L'
            left = [left_side.index(num), 0]
        elif num in right_side:
            answer += 'R'
            right = [right_side.index(num), 2]
        else:
            target = [center.index(num), 1]
            l_distance = abs(target[0]-left[0]) + abs(target[1]-left[1])
            r_distance = abs(target[0]-right[0]) + abs(target[1]-right[1])
            
            if l_distance > r_distance:
                answer += 'R'
                right = target
            elif l_distance < r_distance:
                answer += 'L'
                left = target
            else:
                if hand == "left":
                    answer += 'L'
                    left = target
                else:
                    answer += 'R'
                    right = target
    return answer

코드가 좀 길어졌지만 문제의 조건대로 하나씩 천천히 체크해서 짜면 어렵지 않은 문제였다.

2, 5, 8, 0번 조건을 판단하기 위해서 키패드를 2차원 배열을 통해 엄지 손가락의 현재 좌표를 관리하였다.

 

이런 문제는 시간복잡도 issue도 없기 때문에 매우 빠르게 풀고 넘어가야 한다.

해당 문제에서는 조금 코드가 복잡해지더라도 확신을 갖고 빠르게 쭉 구현하는 태도가 필요했다.