키패드 누르기 _ Lv.1

2022. 9. 6. 22:522022/Programmers_Kakao 기출

이번 문제는 쪼꼼 시간이 들었지만 0이 키패드를 좌표로 나타냈을 때 [3, 1]에 위치한다는 점, 처음 손가락이 *과 #에 위치한다는 점을 간과하여 시간이 더 들었다. 

그래도 키패드를 좌표화 해서 풀면 크게 어렵지 않은 문제였다 :)

def solution(numbers, hand):
    # 1, 4, 7은 왼쪽 엄지
    # 3, 6, 9는 오른쪽 엄지
    # 2, 5, 8, 0은 두 엄지손가락의 현재 키패드 위치에서 더 가까운 엄지손가락 - 둘다 거리가 같다면 오른손잡이는 오른쪽, 왼손잡이는 왼쪽
    answer = ''
    rh = 0; lh = 0; d = [[3, 1], [0,0], [0,1], [0,2], [1, 0], [1, 1], [1, 2], [2, 0], [2, 1], [2, 2]]
    handLocR = [3, 0]; handLocL = [3, 2]
    for num in numbers:
        if num in [1, 4, 7]:
            answer+="L"; lh = num; handLocL = d[lh]
        elif num in [3, 6, 9]:
            answer+="R"; rh = num; handLocR = d[rh]
        else:
            if abs(handLocR[0]-d[num][0]) + abs(handLocR[1]-d[num][1]) < abs(handLocL[0]-d[num][0]) + abs(handLocL[1]-d[num][1]):
                answer+="R"; rh = num; handLocR = d[rh]
            elif abs(handLocR[0]-d[num][0]) + abs(handLocR[1]-d[num][1]) > abs(handLocL[0]-d[num][0]) + abs(handLocL[1]-d[num][1]):
                answer += "L"; lh = num; handLocL = d[lh]
            else:
                answer+=hand.upper()[0]
                if hand.upper()[0] == "R":
                    rh = num; handLocR = d[rh]
                else: lh = num; handLocL = d[lh]
    return answer

'2022 > Programmers_Kakao 기출' 카테고리의 다른 글

크레인 인형뽑기 게임 _ Lv.1  (0) 2022.09.09
성격 유형 검사하기 _ Lv.1  (0) 2022.09.06
숫자 문자열과 영단어 _ Lv.1  (0) 2022.09.05
신규 아이디 추천 _ Lv.1  (0) 2022.09.04
신고결과받기 _ Lv.1  (0) 2022.09.04