본문 바로가기
프로그래머스/Lv.1

2020 카카오 인턴십 > 키패드 누르기, 구현, abs

by 아찌방 2024. 11. 15.

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/67256

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

 

풀이 - 나의 생각

번호별 좌표를 리스트에 저장하고

 

L, R에 해당하는 번호는 그냥 바로 저장하면 되고

 

2, 5, 8, 0 을 누를때는 거리를 비교해서 저장하면 됩니다.

 

더 간단하게 할 방법이 있을까 고민했는데

 

지금은 이게 그나마 나은 거 같습니다.

 

더 좋은 방법이 있다면 알려주시면 감사하겠습니다.

 

코드

 

def distance(direct, now):
    return abs(direct[0] - now[0]) + abs(direct[1] - now[1])
    
def solution(numbers, hand):
    answer = ''
    pad = {
        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),
        11:(3,0), 0:(3,1), 12:(3,2),
    }
    L, R = 11, 12
    
    for num in numbers:
        if num in [1, 4, 7]:
            answer += 'L'
            L = num
        elif num in [3, 6, 9]:
            answer += 'R'
            R = num
        else:
            #거리비교, 같으면 hand 따라서
            distanceL = distance(pad[L], pad[num])
            distanceR = distance(pad[R], pad[num])
            if distanceL == distanceR:
                if hand == "left":
                    answer += 'L'
                    L = num
                else:
                    answer += 'R'
                    R = num
            else:
                if distanceL < distanceR:
                    answer += 'L'
                    L = num
                else:
                    answer += 'R'
                    R = num
    return answer

 

 

 

 

 

 

 

다음에 또 봐요

 

728x90