[프로그래머스](python) 키패드 누르기 - 2020 카카오 인턴십
가운데 키패드를 누를 때의 알고리즘을 짜는 게 관건!
🧩 수도 코드
번호를 누를 때마다 그 번호로 리셋하기
왼쪽, 오른쪽, 가운데 키패드의 조건을 따로 만들고
가운데 키패드를 누를 때 고려해야할 조건 1.distance 2.hand
🏁 내 풀이
def solution(numbers, hand):
answer = ''
last_l = 10
last_r = 12
pad = [[1,4,7],[2,5,8],[3,6,9]]
for num in numbers:
if num in pad[0]: # Left
answer += 'L'
last_l = num
elif num in pad[2]: # Right
answer += 'R'
last_r = num
else: # Middle'
num = 11 if num == 0 else num
abs_l = abs(num-last_l) # 거리 계산하기 위해
abs_r = abs(num-last_r)
if sum(divmod(abs_l, 3)) > sum(divmod(abs_r, 3)):
answer += 'R'
last_r = num
elif sum(divmod(abs_l, 3)) < sum(divmod(abs_r, 3)):
answer += 'L'
last_l = num
else:
if hand == 'left':
answer += 'L'
last_l = num
else:
answer += 'R'
last_r = num
return answer
answer = '' last_l = 10 last_r = 12 pad = [[1,4,7],[2,5,8],[3,6,9]]
- numbers 리스트에서 하나씩 처리한 후 덮어 씌울 변수
왼손 엄지가 올려 있는 번호를 last_l,
오른손 엄지가 올려 있는 번호를 last_r로 정함 - pad로 키패드 왼쪽, 가운데, 오른쪽 나누어주었다.
for num in numbers:
if num in pad[0]:
answer += 'L'
last_l = num
- 숫자가 [1,4,7]에 있을 때,
answer에 'L'을 더하고
손가락이 올려있는 숫자를 마지막 숫자로
elif num in pad[2]:
answer += 'R'
last_r = num
- 숫자가 [3,6,9]에 있을 때,
answer에 'R'을 더하고
손가락이 올려있는 숫자를 마지막 숫자로
else:
num = 11 if num == 0 else num
abs_l = abs(num-last_l) # 거리 계산하기 위해
abs_r = abs(num-last_r)
- 숫자가 [2,5,8]에 있을 때,
계산하기 쉽게 '*'을 10, 0을 11, '#'을 12로 변수 설정해둠
📌 거리 계산
- (|a-b|//3) + (|a-b|%3)
(a-b)/3의 몫 + (a-b)/3의 나머지
|a-b|를 변수에 저장
if sum(divmod(abs_l, 3)) > sum(divmod(abs_r, 3)):
answer += 'R'
last_r = num
- (|a-b|//3) + (|a-b|%3)
왼쪽 마지막 숫자와의 거리 : sum(divmod(abs_l, 3))
오른쪽 마지막 숫자와의 거리: sum(divmod(abs_r, 3))
왼쪽 마지막 숫자와 새로운 숫자의 거리가 더 크면
더 가까운 right hand가 가고 answer + R,
오른쪽 마지막 숫자로 덮어짐
elif sum(divmod(abs_l, 3)) < sum(divmod(abs_r, 3)):
answer += 'L'
last_l = num
- 위와 동일
else:
if hand == 'left':
answer += 'L'
last_l = numelse:
answer += 'R'
last_r = numreturn answer
- 가운데 키패드 누를 때의 두 번째 조건 hand에 따른 조건문
오래 걸렸다 🥸 헥헥
Author And Source
이 문제에 관하여([프로그래머스](python) 키패드 누르기 - 2020 카카오 인턴십), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@richeberry/프로그래머스python-키패드-누르기-2020-카카오-인턴십저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)