알고리즘/프로그래머스

[프로그래머스] 키패드 누르기 for Python

정석이 2022. 3. 15. 14:15

https://programmers.co.kr/learn/courses/30/lessons/67256?language=python3 

 

코딩테스트 연습 - 키패드 누르기

[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

 

 

 

문제

 


 

파이썬으로 다시 풀었다.

 

 

자바로 풀었을 때 누구꺼 참고했던 것 같은데...

 

 

 

https://ticssfm.tistory.com/42?category=1014765 

 

[프로그래머스] 키패드 누르기 for JAVA

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..

ticssfm.tistory.com

 

 

그르네ㅋ

 

 

역시 자바 배열보다는 파이썬 리스트가 훨씬 편한 느낌~~

 

 

 

코드

def solution(numbers, hand):
    answer = ''
    num = [[3,1], [0,0], [0,1], [0,2], [1,0], [1,1], [1,2], [2,0], [2,1], [2,2]]
    R = [3,2]
    L = [3,0]
        
    for i in numbers:
        if i in [1,4,7]:
            answer += 'L'
            L = num[i]
        elif i in [3,6,9]:
            answer += 'R'
            R = num[i]
        else:
            midL = abs(num[i][0] - L[0]) + abs(num[i][1] - L[1])
            midR = abs(num[i][0] - R[0]) + abs(num[i][1] - R[1])
            if midL < midR:
                answer += 'L'
                L = num[i]
            elif midL > midR:
                answer += 'R'
                R = num[i]
            else:
                if hand == 'right':
                    answer += 'R'
                    R = num[i]
                else:
                    answer += 'L'
                    L = num[i]
                
    return (''.join(answer))

 

 

 

문제 그대로 코드로 갈겼다.

 

 

 

남의 코드도 살펴봤는데 다들 나랑 비슷하고...

 

 

2중 리스트 쓴거 대신 딕셔너리 쓴 사람도 있다. 사실 이거쓸까 고민했는데 ㅎㅎㅋㅋㅋ