DevKim

[Python] 카카오 기출 - 키패드 누르기 본문

알고리즘 PS

[Python] 카카오 기출 - 키패드 누르기

on_doing 2021. 2. 2. 22:24
728x90

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

[문제 접근]

- 키패드의 인덱스를 리스트로 생성하여 미리 저장해두고 (*,#은 인덱스 10,11로 지정), 애매한 2,4,6,8 번들의 손가락 위치는 그 전의 왼쪽, 오른쪽 손가락 위치와 비교해서 더 작은 위치를 return

  

 

[알고리즘]

- 구현

 

 

[코드]

def solution(numbers, hand):
    answer = ''
    index=[(3,1),(0,0),(0,1),(0,2),(1,0),(1,1),(1,2),(2,0),(2,1),(2,2),(3,0),(3,2)] #마지막은 *(10),#(11)
    left=[10]
    right=[11]
    for n in numbers:
        #왼쪽
        if n==1 or n==4 or n==7:
            left.append(n)
            answer+='L'
        elif n==3 or n==6 or n==9:
            right.append(n)
            answer+='R'
        #애매한 애들
        else:
            pre_left=left[-1] #그 전의 왼쪽 손가락 위치
            pre_right=right[-1] # 그 전의 오른쪽 손가락 위치
            
            now=index[n] #누르고자하는 번호의 (x,y)위치
            l=index[pre_left] #이 전의 왼쪽 손가락 (x,y) 위치
            r=index[pre_right] #이 전의 왼쪽 손가락 (x,y) 위치
            
            #현재 누르고자하는 위치와 이 전 손가락의 위치 차이
            L=abs(abs(now[0]-l[0])+abs(now[1]-l[1]))
            R=abs(abs(now[0]-r[0])+abs(now[1]-r[1]))
            
            if L<R: #왼쪽이 더 가까움
                answer+='L'
                left.append(n)
            elif L>R: #오른쪽이 더 가까움
                answer+='R'
                right.append(n)
            else: #둘이 같음
                if hand=='left':
                    answer+='L'
                    left.append(n)
                else:
                    answer+='R'
                    right.append(n)
            
    return answer

 

 

 

728x90
Comments