본문 바로가기

Coding test

[프로그래머스/Lv.1/파이썬] 키패드 누르기

https://school.programmers.co.kr/learn/courses/30/lessons/67256

 

프로그래머스

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

programmers.co.kr


소스코드

def solution(numbers, hand):
    answer = ''
    def distance(a,b):
        x = abs((a+2) % 3 - (b+2) % 3)  
        y = abs((a-1)//3 - (b-1) //3)
        return x +y
    left = [1,4,7]
    right = [3,6,9]
    l,r = 10,12
    for num in numbers :
        if num == 0:
            num = 11
        if num in left:
            l = num
            answer += 'L'
        elif num in right :
            r = num
            answer += 'R'
        else :
            if distance(num,r) >distance(num,l):
                l = num
                answer += 'L'
            elif distance(num,r) < distance(num,l):
                r = num
                answer += 'R'
            else :
                if hand == 'right':
                    r = num
                    answer += 'R'
                elif hand =='left':
                    l = num
                    answer += 'L'
    return answer

풀이

1 2 3
4 5 6
7 8 9
* 0 #

키패드가 위와 같이 생겼는데

1. 두 점 거리 계산하기

    def distance(a,b):
        x = abs((a+2) % 3 - (b+2) % 3)  
        y = abs((a-1)//3 - (b-1) //3)
        return x +y

이런 함수를 사용해서 두 숫자간의 거리를 알 수 있는 함수를 만들었다.

3을 3으로 나눈 몫은 0이므로 2를 더해줬다.

그렇게 되면 1,2,3 -> 0,1,2 이렇게 된다.

2. 변수

l, r이라는 변수에 각각 가장 최근에 눌렀던 숫자를 넣었다. 여기서 조심할 점은

*,0,#이 부분은 각각 10,11,12로 치환해서 풀었다.

그렇게 값을 넣어서 제출하면 완료 ~