Algorithm/1일 1코테

[😍 프로그래머스-카카오인턴] 키패드 누르기

대인보우 2021. 7. 22. 14:33
반응형

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):
    keypad = [[1,2,3], [4,5,6], [7,8,9],['*',0,'#']]
    answer = ''

    L = '30'
    R = '32'
    
    for number in numbers:
        for x in range(len(keypad)): # x 좌표
            for y in range(len(keypad[0])): # y 좌표
                if keypad[x][y] == number: # 숫자랑 좌표가 같으면
                    if number in [1,4,7]: # 1,4,7일 경우 왼손
                        L = str(x)+str(y) # 왼손에 저장
                        answer += 'L' # 답안에 추가
                        break
                    elif number in [3,6,9]:# 3,6,9일 경우 오른손
                        R = str(x)+str(y)
                        answer += 'R'
                    else:
                        distance_l = abs(int(L[0])-x) + abs(int(L[1])-y) # 거리 구하기
                        distance_r = abs(int(R[0])-x) + abs(int(R[1])-y) # 거리 구하기
                        if distance_l > distance_r: 
                            R = str(x)+str(y)
                            answer += 'R'
                        elif distance_l < distance_r:
                            L = str(x)+str(y)
                            answer += 'L'
                        else: # 거리가 같으면 손잡이로 판단
                            if hand == 'right':
                                R = str(x)+str(y)
                                answer += 'R'
                            else:
                                L = str(x)+str(y)
                                answer += 'L'
    return answer

 

반응형