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

Ssoony의 Velog·2024년 6월 28일
0

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

def solution(numbers, hand):
    answer=''
    leftKeypad={1:1,4:2,7:3} #왼손 키패드 좌표
    midKeypad={2:1,5:2,8:3,0:4} #가운데 키패드 좌표
    rightKeypad={3:1,6:2,9:3} #오른손 키패드 좌표
    leftX=1 #왼손 X 시작점
    leftY=4 #왼손 Y 시작점
    rightX=3 #오른손 X 시작점
    rightY=4 #오른손 Y 시작점
    positionX=0 #가운데 포인트 좌표 X 초기값
    positionY=0 #가운데 포인트 좌표 Y 초기값
    handS=hand[0].upper() #어느 손 잡이인지 확인
    for i in numbers:
        if i in leftKeypad.keys(): #왼손 키패드를 누르는 좌표
            leftX=1
            leftY=leftKeypad[i]
            answer+='L'
        elif i in rightKeypad.keys(): #오른손 키패드를 누르는 좌표
            rightX=3
            rightY=rightKeypad[i]
            answer+='R'
        else:
            positionX=2 #가운데 키패드 좌표 지정
            positionY=midKeypad[i]
            leftD=abs(leftX-positionX)+abs(leftY-positionY) #왼손과의 거리
            rightD=abs(rightX-positionX)+abs(rightY-positionY) #오른손 과의 거리
            if leftD<rightD:
                leftX=2
                leftY=midKeypad[i]
                answer+='L'
            elif leftD>rightD:
                rightX=2
                rightY=midKeypad[i]
                answer+='R'
            else:
                if handS=='R':
                    rightX=2
                    rightY=midKeypad[i]
                    answer+='R'
                else:
                    leftX=2
                    leftY=midKeypad[i]
                    answer+='L'
    return answer

나의 풀이법은 키워드는 키패드 각각의 자리를 좌표로 표시하여 거리를 구했다.

  1. 왼손과 오른손의 초기위치(*,#)를 좌표로 입력
  2. 왼손(1,4,7)과 오른손(3,6,9)의 키패드를 누른다면, 어느 손으로 누를지 입력하고, 현재 손의 위치(좌표)를 수정
  3. 가운데 좌표를 누르는 경우, 현재 누를 위치 positionX,Y와 왼손과 오른손의 현재위치와의 거리를 측정
  4. 이를 서로 비교하여 가까운 손을 선택하고, 같은 거리에 있으면 어느 손잡이인지 확인하여 좌표 수정
profile
개발자로 성장하기 위한 한걸음

0개의 댓글