본문 바로가기
프로그래머스/1단계

(Python/LV1) 키패드 누르기

by windy7271 2022. 9. 15.
728x90
반응형

문제출처: https://school.programmers.co.kr/learn/courses/30/lessons/67256

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

풀이:

 

def solution(numbers, hand):
    answer =''

    pad = {'1':(0,0), '2':(0,1), '3':(0,2),
           '4':(1,0), '5':(1,1), '6':(1,2),
           '7':(2,0), '8':(2,1), '9':(2,2),
           '*':(3,0), '0':(3,1), '#':(3,2)
           }
    left = pad['*']   #처음 왼손
    right = pad['#']  #처음 오른손
    print(pad['2'][1]) # 손위치 뽑아봄
    for i in numbers:
        now = pad[str(i)] # 숫자의 키패드 위치 
        # 1, 4, 7을 누르는 경우
        if i in [1, 4, 7]:
            answer += 'L'
            left = now
        # 3, 6, 9를 누르는 경우
        elif i in [3, 6, 9]:
            answer += 'R'
            right = now
        # 2, 4, 6, 8 을 누르는경우
        else:
        # x 좌표 + y 좌표 길이
            left_dt = abs(pad[str(i)][0] - left[0] ) + abs(pad[str(i)][1] - left[1])
            # 왼손 길이
            right_dt =abs(pad[str(i)][0] - right[0] ) + abs(pad[str(i)][1] - right[1])
            # 오른손 깅리
            if left_dt < right_dt : # 왼손이 가까움
                answer += 'L'
                left = pad[str(i)]
			
            elif left_dt > right_dt : # 오른손이 가까움
                answer += 'R'
                right = pad[str(i)]

            else :
                if hand == 'right' : # 길이가 같은데 오른손잡이
                    answer += 'R'
                    right = pad[str(i)]
                else :				# 왼손 잡이
                    answer += 'L'
                    left = pad[str(i)]

    return answer

 

반응형

댓글