[프로그래머스] 키패드 누르기, 파이썬

YuJangHoon·2022년 6월 28일
0
post-thumbnail

[프로그래머스] 키패드 누르기, 파이썬

💡 문제 해결 아이디어

내가 생각한 아이디어

  • 각 키패드의 번호의 좌표와 왼손, 오른손의 좌표를 가로(행) 4 세로(열) 3의 2차원 배열로 표현
  • 0을 제외한 좌표의 계산은 1을 빼고 3으로 나눈 (몫, 나머지)로 설정한다
  • 0의 좌표는 [3, 1]
  • 초기 시작 왼손과 오른손의 좌표는 [3,0], [3,2]
  • 왼손을 쓰는 경우
    1. 1,4,7을 누를 때 (좌표의 두번째 값이 0일 때)
    2. 2,5,8을 누르는데, 해당 좌표와의 거리가 오른손보다 가까울 떄
    3. 2,5,8을 누르는데, 해당 좌표와의 거리가 같고 왼손잡이일 때
  • 그 외에는 오른손을 쓴다.

💻 작성된 코드(수정)

def solution(numbers, hand):   
    answer = ''
    # 왼손과 오른손 초기 좌표 설정
    lhand, rhand = [3,0], [3,2]
    # 누를 번호들을 순회하면서
    for num in numbers:
    	# 번호가 0일 때만 따로 좌표 계산
        if num == 0:
             coord = [3,1]
        # 그 외에는 -1하고 3으로 나눈 (몫, 나머지)가 좌표
        else:
            coord = ((num-1)//3, (num-1)%3)
        
        # 왼손과 번호의 거리, 오른손과 번호의 거리 계산
        ldist = abs(lhand[0]-coord[0]) + abs(lhand[1]-coord[1])
        rdist = abs(rhand[0]-coord[0]) + abs(rhand[1]-coord[1])
        # 만약 1,4,7을 누르거나
        # 2,5,8을 누르는데 왼손이 더 가깝거나
        # 2,5,8을 누르는데 거리가 같으면서 왼손잡이면
        if coord[1] == 0 or \
            coord[1] == 1 and (ldist < rdist or (ldist == rdist and hand == "left" )):
            # 왼손이 해당 번호로 이동하고, 문자열에 "L" 추가
            lhand = coord
            answer = answer + "L"
        else :
        	# 아니면 오른손이 이동하고 "R" 추가
            rhand = coord
            answer = answer + "R"
        
    return answer
profile
HYU DataScience, ML Engineer - 산업기능요원(4급)

0개의 댓글