🔍 알고리즘/프로그래머스 Python
[Python] 프로그래머스 67256.키패드누르기 (Lv.1)
탄치
2022. 7. 11. 22:16
https://school.programmers.co.kr/learn/courses/30/lessons/67256
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
조금 머리를 써야하는 시뮬레이션 문제입니다.
왼손과 오른손의 엄지를 써서 누르는 방법이 정해진 번호 (1,4,7,*)과 (3,6,9,#)은 그대로 진행하면 되지만 중앙의 (2,5,8,0) 번호는 현재 상황에서 더 가까운 손가락을 사용해야 합니다.
저는 각 번호마다 해당 번호와의 거리를 미리 계산해놓고, 현재 손가락의 위치를 통해 거리를 비교하는 식으로 구현했습니다.
def solution(numbers, hand):
distance = [[3,1,0,1,2,1,2,3,2,3,4,4],[2,2,1,2,1,0,1,2,1,2,3,3],[1,3,2,3,2,1,2,1,0,1,2,2],[0,4,3,4,3,2,3,2,1,2,1,1]]
# 순서대로 2,5,8,0과 각 버튼(0~9,*,#)의 거리
flag = (hand == "right")
left = 10
right = 11
answer = ''
for i in numbers :
if(i == 1 or i == 4 or i == 7):
left = i
answer += 'L'
elif(i == 3 or i == 6 or i == 9):
right = i
answer += 'R'
else :
target = 0
if(i == 5):
target = 1
if(i == 8):
target = 2
if(i == 0):
target = 3
if(distance[target][left] == distance[target][right]):
if(flag) :
right = i
answer += 'R'
else :
left = i
answer += 'L'
elif(distance[target][left] < distance[target][right]):
left = i
answer += 'L'
else :
right = i
answer += 'R'
return answer
numbers = [[1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5],[7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2],[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]]
hand = ["right", "left", "right"]
for i in range(0,3):
print(solution(numbers[i],hand[i]))
728x90