SMALL
문제 출처
풀이 코드
def solution(numbers, hand):
answer = ''
now_l=10
now_r=12
for n in numbers:
if n in [1, 4, 7]:
answer+='L'
now_l=n
elif n in [3, 6, 9]:
answer+='R'
now_r=n
else:
n=11 if n==0 else n
abL=abs(now_l-n)
abR=abs(now_r-n)
if sum(divmod(abL, 3)) < sum(divmod(abR, 3)):
answer+='L'
now_l=n
elif sum(divmod(abL, 3)) > sum(divmod(abR, 3)):
answer+='R'
now_r=n
else:
if hand == "right":
answer+='R'
now_r=n
else:
answer+='L'
now_l=n
return answer
코드 설명
*, 0, # 는 1~9까지의 숫자키와 규칙을 만들기 어렵기 때문에 각각 10, 11, 12로 재설정합니다.
[1, 4, 7] 과 [3, 6, 9] 와 [2, 5, 8, 0] 세 부분으로 나누어 규칙을 만듭니다.
1) 1, 4, 7 번호 규칙: 무조건 왼손 엄지가 누른다
2) 3, 6, 9 번호 규칙: 무조건 오른손 엄지가 누른다
3) 2, 5, 8, 0 번호 규칙: divmod() 와 절댓값을 이용한다
엄지손가락은 상하좌우로 이동하기 때문에 키패드들 사이에 아래와 같은 이동규칙이 발생합니다.
▲(-3)
(-1)◀ ▶(+1)
▼(+3)
좌우는 문제될 게 없지만, 상하는 차이가 3씩 나기 때문에 단순히 절댓값 차이만으로는 계산하기 어렵습니다.
그래서 현재위치와 타겟위치의 차이(절댓값)를 3으로 나누어주고
몫과 나머지의 크기를 비교해야 합니다.
오른손 엄지의 현재위치에서 타겟위치의 차이를 3으로 나눈 몫과 나머지를 A
왼손 엄지의 현재위치에서 타겟위치의 차이를 3으로 나눈 몫과 나머지를 B라고 둔 뒤
A와 B 중 크기가 작은 손가락으로 타겟버튼을 누르도록 코딩합니다.
LIST
'알고리즘-python > Programmers 문제' 카테고리의 다른 글
[프로그래머스/1단계/파이썬(Python3)] 폰켓몬 (0) | 2021.06.25 |
---|---|
[프로그래머스/1단계/파이썬(Python3)] 신규 아이디 추천 (0) | 2021.06.25 |
[프로그래머스 / 1단계 / 파이썬(Python3)] 두 정수 사이의 합 (0) | 2020.07.01 |
[프로그래머스 / 2단계 / 파이썬(Python3)] 카펫 (1) | 2020.07.01 |
[프로그래머스 / 2단계 / 파이썬(Python3)] 전화번호목록 (0) | 2020.05.24 |