알고리즘/프로그래머스 문제풀이

[프로그래머스] lv.1 키패드 누르기 풀이

감자156 2023. 10. 26. 19:03
반응형

문제

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 풀이

문제 조건대로 구현함.

거리를 측정하는 함수는 각 키패드에 대해 위치를 기록해두고, |x1-x2| + |y1-y2|를 계산함.

 

코드

def distance(num, l_status, r_status, hand):
    location = {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]}
    
    dis_l = abs(location[num][0] - location[l_status][0]) + abs(location[num][1] - location[l_status][1])
    dis_r = abs(location[num][0] - location[r_status][0]) + abs(location[num][1] - location[r_status][1])

    if dis_l > dis_r or (dis_l == dis_r and hand[0] == 'r'):
        return 'R', l_status, num
    elif dis_l < dis_r or (dis_l == dis_r and hand[0] == 'l'):
        return 'L', num, r_status

def solution(numbers, hand):
    l_status, r_status = '*', '#'
    res = ''
    
    for num in numbers:
        if num in [1, 4, 7]:
            l_status = num
            res += 'L'
        elif num in [3, 6, 9]:
            r_status = num
            res += 'R'
        else:
            hand_type, l_status, r_status = distance(num, l_status, r_status, hand)
            res += hand_type
            
    return res
반응형