PS/프로그래머스

[Python] 키패드 누르기

s_omi 2024. 10. 31. 09:20

✏️ 문제

 

문제 파악

0을 제외한 숫자 키패드를 배열에 넣어서 배열의 인덱스를 활용해서 풀었다.

cur 2차원 배열에 인덱스 0에는 왼손의 마지막 위치, 1에는 오른손의 마지막 위치를 넣어 움직였을 시 해당 숫자 키패드 위치를 대입하는 코드로 짰다. 

 

 

코드

  • 처음에 제출한 코드
def solution(numbers, hand):
    answer = ''
    cur = [[0, 3], [2, 3]] 
    
    for n in numbers:
        if n == 1 or n == 4 or n == 7:
            answer += 'L' 
            cur[0][0] = (n-1) % 3
            cur[0][1] = (n-1) // 3 
        elif n == 3 or n == 6 or n == 9:
            answer += 'R'
            cur[1][0] = (n-1) % 3
            cur[1][1] = (n-1) // 3
        elif n == 2 or n == 5 or n == 8:
            left_length = abs(cur[0][0] - ((n-1) % 3)) + abs(cur[0][1] - ((n-1) // 3)) 
            right_length = abs(cur[1][0] - ((n-1) % 3)) + abs(cur[1][1] - ((n-1) // 3))

            if left_length == right_length:
                if hand == 'right':
                    answer += 'R'
                    cur[1] = [(n-1) % 3, (n-1) // 3]
                else:
                    answer += 'L'
                    cur[0] = [(n-1) % 3, (n-1) // 3]
            elif left_length < right_length:
                answer += 'L'
                cur[0] = [(n-1) % 3, (n-1) // 3]
            else:
                answer += 'R'
                cur[1] = [(n-1) % 3, (n-1) // 3]
        else: # n == 0
            left_length = abs(cur[0][0] - 1) + abs(cur[0][1] - 3)  
            right_length = abs(cur[1][0] - 1) + abs(cur[1][1] - 3)

            if left_length == right_length:
                if hand == 'right':
                    answer += 'R'
                    cur[1] = [1, 3]
                else:
                    answer += 'L'
                    cur[0] = [1, 3]
            elif left_length < right_length:
                answer += 'L'
                cur[0] = [1, 3]
            else:
                answer += 'R'
                cur[1] = [1, 3]
    
    return answer
  • 정리한 코드
def solution(numbers, hand):
    answer = ''
    cur = [[0, 3], [2, 3]] 
    hand = 'R' if hand == 'right' else 'L' 
    
    for n in numbers:
        if n in [1, 4, 7]: 
            answer += 'L'
            cur[0] = [(n - 1) % 3, (n - 1) // 3]
        elif n in [3, 6, 9]: 
            answer += 'R'
            cur[1] = [(n - 1) % 3, (n - 1) // 3]
        else: 
            target = [(n - 1) % 3 if n != 0 else 1, (n - 1) // 3 if n != 0 else 3]
            left_length = abs(cur[0][0] - target[0]) + abs(cur[0][1] - target[1])
            right_length = abs(cur[1][0] - target[0]) + abs(cur[1][1] - target[1])

            if left_length == right_length:
                answer += hand
                cur[0 if hand == 'L' else 1] = target
            elif left_length < right_length:
                answer += 'L'
                cur[0] = target
            else:
                answer += 'R'
                cur[1] = target

    return answer

 

'PS > 프로그래머스' 카테고리의 다른 글

[Python] 햄버거 만들기  (0) 2024.10.31
[Python] 체육복  (0) 2024.10.31
[Python] 로또의 최고 순위와 최저 순위  (0) 2024.10.29
[Python] 문자열 나누기  (0) 2024.10.29
[Python] 둘만의 암호  (0) 2024.10.29