키패드 누르기 [카카오 인턴] ( Python / C++ )

inkyu0103·2020년 9월 14일
0

프로그래머스 - 키패드 누르기 [카카오인턴]

어렵지는 않았는데, 그냥 잡다한 생각을 해서 그런지 시간이 많이 걸렸다. (사실 생각을 못해서 시간을 많이 잡아먹었다.)
[1,4,7] / [3,6,9] 이 부분이야 처리하는게 어렵지 않지만, [2,5,8,0] 이 부분은 현재 왼손 / 오른손 과의 거리를 어떻게 재야 할지 고민했다.

  • 거리..거리를 어떻게 재니...
  • 뭔가 반복문 좌르륵 돌리면 쟌쟌 하고 정답이 나오는게 없을까 ( 없다 )

이런 생각 하다가 그냥 딕셔너리에다가 각 번호의 좌표를 넣고 [2,5,8,0] 을 누를 때, 두 손과 누른 버튼의 거리를 구했습니다.

def solution(numbers, hand):
    key = { 1 : (0,0), 2 : (0,1) , 3 :(0,2) ,
            4 : (1,0), 5: (1,1)  , 6:(1,2),
            7 : (2,0), 8:(2,1)   , 9:(2,2) , 
            "*":(3,0), 0 :(3,1)  ,"#" :(3,2) }
    
    left = [1,4,7]
    right = [3,6,9]
    last_left = ["*"]
    last_right = ["#"]
    answer = ''
    
    for num in numbers : 
        if num in left : 
            answer += "L"
            last_left.append(num)
        elif num in right :
            answer += "R"
            last_right.append(num)
        else :
            left_dist = abs( key[last_left[-1]][0]- key[num][0])  + abs(key[last_left[-1]][1]-key[num][1])
            right_dist = abs(key[last_right[-1]][0]-key[num][0]) + abs(key[last_right[-1]][1]-key[num][1])
            
            if left_dist == right_dist :
                if hand == "right" :
                    answer += "R"
                    last_right.append(num)
                else : 
                    answer += "L"
                    last_left.append(num)
                    
            elif left_dist < right_dist : 
                answer += "L"
                last_left.append(num)
                
            elif left_dist > right_dist : 
                answer += "R"
                last_right.append(num)
            
    
    return answer

C++ 은 추가 예정


include <iostream>

profile
안녕하세요 ? 문돌이에요

0개의 댓글