티스토리 뷰

728x90

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" [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] "right" "LLRLLRLLRL"

programmers.co.kr

 

  • 해설 :

구현 문제이다 12개의 키가 있는 번호판에서 다음번에 누르려는 키패드에서 왼쪽 열에 있는 경우 왼손으로, 오른쪽 열에 있는 경우 오른손으로 누르고 중간 열에 잇는 경우 가장 가까운 손으로 키패드를 누르며 이동시키면 된다. 핵심은 키패드간의 거리를 계산하는 방법이다.

 

 

 

  • 풀이 :

현재 왼손과 오른손의 위치를 저장하는 변수를 만들고 다음번에 누르려는 키가 패드의 왼쪽이나 오른쪽일 경우 해당하는 손가락을, 중간열에 위치할 경우 현재 손가락의 위치와 이동하려는 좌표간의 거리를 계산하는 diff함수를 사용하여 짧은 쪽의 손가락을 이동하게 구현하였다.

 

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
def diff(h,i):
    return abs((h//3-i//3)) + abs((h%3-i%3))
 
 
def solution(numbers, hand):
    left = [0,3,6]
    right = [2,5,8]
    answer = ''
    lhand = 9
    rhand = 11
    for i in numbers:
        if i == 0:
            i = 11
        i -= 1
        
        if i in left:
            answer += 'L'
            lhand = i
        elif i in right:
            answer += 'R'
            rhand = i
        else:
            ld = diff(lhand,i)
            rd = diff(rhand,i)
            if ld < rd:
                lhand = i
                answer += 'L'
            elif ld > rd:
                rhand = i
                answer += 'R'
            else:
                if hand == "right":
                    rhand = i
                    answer += 'R'
                else:
                    lhand = i
                    answer += 'L'     
    return answer
cs
320x100
댓글
© 2022 WonSeok, All rights reserved