[Programmers] level1-키패드 누르기

풀이
특별한 자료구조를 알아야 풀 수 있는 문제는 아닌 것 같다. 그래서 레벨1에 있는 것 같은데, 나는 빠르게 알고리즘을 만들어낼 수는 없었다. 아직도 많이 모자라다고 느꼈다 ... ,

키패드의 숫자를 2차원 배열의 인덱스로 변환하는 방법으로 구현했다.
행은 (num - 1) // 3, 열은 (num-1)%3으로 나타낼 수 있다. 필요한 정보는 왼손/오른손의 현재 위치 인덱스, 입력해야하는 숫자의 인덱스.
1,4,7이 눌리면 왼손의 인덱스를 변경하고 오른쪽 숫자들도 마찬가지로 무조건 오른손 인덱스가 변경되도록 했다. 숫자가 중간에 있을 경우 각 손의 위치로부터 타겟 숫자 인덱스 사이의 거리를 abs 메서드를 사용해 구하고 거리가 같은 경우, 다른경우를 구분해서 구현했다. 

이게 최선의 알고리즘 인지는 모르겠지만 더 줄일 방법이 생각나지 않는다. 카카오에서 해설을 올려준다면 다시 봐야할 문제!

def solution(numbers, hand):
    currentL = [3,0]
    currentR = [3,2]
    answer = ''
    for num in numbers:
        i = (num-1// 3
        j = (num-1) % 3
        if num == 0 :
            i,j = 3,1
        if j == 0:
            answer+='L'
            currentL = [i,j]
        elif j == 2:
            answer+='R'
            currentR = [i,j]
        else:
            distL = abs(currentL[0]-i) + abs(currentL[1]-j)
            distR = abs(currentR[0]-i) + abs(currentR[1]-j)
            if distL == distR:
                if hand=='right':
                    answer+='R'
                    currentR = [i,j]
                else:
                    answer+='L'
                    currentL = [i,j]
            elif distL < distR:
                answer+='L'
                currentL = [i,j]
            else:
                answer+='R'
                currentR = [i,j]
    return answer
cs




No comments:

Powered by Blogger.