본문 바로가기

코딩테스트/파이썬

프로그래머스 level1 키패드 누르기

728x90

문제 설명

 

 

입출력 예시

 

키패드를 좌표로 생각하여 문제를 접근했다. 키패드 1번은 [0,0] , 키패드 2번은 [0,1] ... 키패드 0번은 [3,1] 로 설정했다. 왼쪽 엄지손가락의 좌표인 left를 [3,0]으로 초기화하고 오른쪽 엄지손가락의 좌표인 right를 [3,2]로 초기화했다. 

 

인자 numbers를 for문을 돌려서 i가 1,4,7일 경우 answer에 'L'을 추가하고 left 값을 바꾸고 i가 3,6,9일 경우 answer에 'R'을 추가하고 right 값을 바꿨다.

 

i가 가운데 줄에 있는 번호 2,5,8,0일 경우 right의 좌표값과 left의 좌표값을 i의 좌표값과 비교하여 좌표값들의 차의 절댓값으로 거리를 계산했다.

 

전체 코드

 

def solution(numbers, hand):
    answer = ''
    left = [3,0]
    right = [3,2]
    
    for i in numbers:
        if(i == 1):
            answer += 'L'
            left = [0,0]
        elif(i == 4):
            answer += 'L'
            left = [1,0]
        elif(i == 7):
            answer += 'L'
            left = [2,0]
        elif(i == 3):
            answer += 'R'
            right = [0,2]
        elif(i == 6):
            answer += 'R'
            right = [1,2]
        elif(i == 9):
            answer += 'R'
            right = [2,2]
        elif(i == 2):
            rd = abs(right[0]-0) + abs(right[1]-1)
            ld = abs(left[0]-0) + abs(left[1]-1)
            if(rd > ld):
                answer += 'L'
                left = [0,1]
            elif(rd < ld):
                answer += 'R'
                right = [0,1]
            else:
                if(hand == 'right'): 
                    answer += 'R'
                    right = [0,1]
                else:
                    answer += 'L'
                    left = [0,1]
        elif(i == 5):
            rd = abs(right[0]-1) + abs(right[1]-1)
            ld = abs(left[0]-1) + abs(left[1]-1)
            if(rd > ld):
                answer += 'L'
                left = [1,1]
            elif(rd < ld):
                answer += 'R'
                right = [1,1]
            else:
                if(hand == 'right'): 
                    answer += 'R'
                    right = [1,1]
                else:
                    answer += 'L'
                    left = [1,1]
        elif(i == 8):
            rd = abs(right[0]-2) + abs(right[1]-1)
            ld = abs(left[0]-2) + abs(left[1]-1)
            if(rd > ld):
                answer += 'L'
                left = [2,1]
            elif(rd < ld):
                answer += 'R'
                right = [2,1]
            else:
                if(hand == 'right'): 
                    answer += 'R'
                    right = [2,1]
                else:
                    answer += 'L'
                    left = [2,1]
        elif(i == 0):
            rd = abs(right[0]-3) + abs(right[1]-1)
            ld = abs(left[0]-3) + abs(left[1]-1)
            if(rd > ld):
                answer += 'L'
                left = [3,1]
            elif(rd < ld):
                answer += 'R'
                right = [3,1]
            else:
                if(hand == 'right'): 
                    answer += 'R'
                    right = [3,1]
                else:
                    answer += 'L'
                    left = [3,1]
    
    return answer
728x90
반응형