🌞Algorithm/🔥programmers

[programmers] [카카오 인턴] 키패드 누르기 - 2020 카카오 인턴십

뿌야._. 2021. 1. 3. 21:52

<[카카오 인턴] 키패드 누르기>

 

문제(출처: https://school.programmers.co.kr/learn/courses/30/lessons/67256)

 

 

문제 풀이

   - my solution

def solution(numbers, hand):
    answer = ''
    # 12 = 키패드 *을 의미, 10 = 키패드 #을 의미
    tempR = 12 #오른손 위치 저장
    tempL = 10 #왼손 위치 저장

    for i in range(len(numbers)):
        if (numbers[i] == 0): #키패드 0 -> 계산을 위해 11로 변경
            numbers[i] = 11
        if (numbers[i] == 1 or numbers[i] == 4 or numbers[i] == 7): #1,4,7인 경우 왼손
            answer += "L"
            tempL = numbers[i]
        elif (numbers[i] == 3 or numbers[i] == 6 or numbers[i] == 9): #3,6,9인 경우 오른손
            answer += "R"
            tempR = numbers[i]
        else: #2,5,8,7인 경우 
            #거리 구함
            temp1 = abs(numbers[i] - tempL) 
            temp2 = abs(numbers[i] - tempR)
            dstL = 0
            dstR = 0
            #거리 별로 숫자 부여
            if (temp1 == 1 or temp1 == 3):
                dstL = 1
            elif (temp1 == 2 or temp1 == 4 or temp1 == 6):
                dstL = 2
            elif (temp1 == 5 or temp1 == 7 or temp1 == 9):
                dstL = 3
            elif (temp1 == 8 or temp1 == 10):
                dstL = 4

            if (temp2 == 1 or temp2 == 3):
                dstR = 1
            elif (temp2 == 2 or temp2 == 4 or temp2 == 6):
                dstR = 2
            elif (temp2 == 5 or temp2 == 7 or temp2 == 9):
                dstR = 3
            elif (temp2 == 8 or temp2 == 10):
                dstR = 4
            
            if (dstL < dstR): #왼손이 더 가까운 경우
                answer += "L"
                tempL = numbers[i]
            elif (dstL == dstR): #거리 같은 경우 hand따라
                if (hand == "right"):
                    answer += "R"
                    tempR = numbers[i]
                else:
                    answer += "L"
                    tempL = numbers[i]
            else: #오른손이 더 가까운 경우
                answer += "R"
                tempR = numbers[i]

    return answer

  계산의 편리를 위하여 * = 10, 0 = 11, # = 12로 바꾸어 문제를 해결

 

    1) 1,4,7인 경우 왼손, 3,6,9인 경우 오른손을 answer에 저장

    2) 그 외의 경우 -> 거리 구하기

        2-1) 차를 이용하여 거리를 구해 각 거리별로 숫자 부여

               - 차가 1,3인 경우: 1

               - 차가 2,4,6인 경우: 2

               - 차가 5,7,9인 경우: 3

               - 차가 8,10인 경우: 4

        2-2) 2-1)에서 구한 숫자를 이용하여 더 가까운 손은 answer에 저장

               - 왼손이 더 가까운 경우: L

               - 오른손이 더 가까운 경우: R

               - 거리가 같은 경우: hand 따라


고려해야 할 것이 많은 문제였기에 다른 문제들보다 해결하는데 시간이 조금 더 걸렸다.    

 

출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges