Programmers - 키패드 누르기

9017 단어 algorithmalgorithm

5. 키패드 누르기

입출력

numbershandresult
[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"

코드

def solution(numbers, hand):
    answer = ''
    curL = 10 		# 왼쪽 손 현재 위치 (= *)
    curR = 12		# 오른쪽 손 현재 위치 (= #)
    
    for number in numbers:
        if number in [1,4,7]:		# 왼쪽 손만 접근 가능
            answer += 'L'
            curL = number
        elif number in [3,6,9]:		# 오른쪽 손만 접근 가능
            answer += 'R'
            curR = number
        else:						# 가운데 배열
            if number == 0:			# 0번 패드를 11번으로 대치
                number = 11
            
            distL = distance(curL, number)
            distR = distance(curR, number)
            
            if distL == distR:		# 왼손, 오른손 거리가 같으면
                if hand == 'left':	# 왼손 잡이
                    answer += 'L'
                    curL = number
                else:				# 오른손 잡이
                    answer += 'R'
                    curR = number
            elif distL > distR:		# 오른손이 더 가까우면
                answer += 'R'
                curR = number
            else:					# 왼손이 더 가까우면
                answer += 'L'
                curL = number
    
    return answer

def distance(current, number):
    if current == number:		# 현재 손이 이미 키패드 위에 있을 때
        return 0
    
    up = float("inf")
    down = float("inf")
    
    # 손이 위로 움직일 때 최소 거리
    upIdx = number	
    upCnt = 1
    while upIdx >= 2:
        if current == upIdx - 1 or current == upIdx + 1 or current == upIdx - 3 or current == upIdx + 3:
            up = upCnt
            break
        upCnt+=1
        upIdx -= 3
    
    # 손이 아래로 움직일 때 최소 거리
    downIdx = number
    downCnt = 1
    while downIdx <= 11:
        if current == downIdx - 1 or current == downIdx + 1 or current == downIdx - 3 or current == downIdx + 3:
            down = downCnt
            break
        downCnt+=1
        downIdx += 3
    
    if up > down:
        return down
    else:
        return up

좋은 웹페이지 즐겨찾기