Notice
Recent Posts
Recent Comments
Link
S E P H ' S
[Python] 키패드 누르기 본문
문제풀이
1. 가운데 2,5,8,0에 대해서 왼손, 오른손 중 어떤 것을 선택할지가 가장 중요한 아이디어이다.
2. 편의를 위해 *, # 를 각각 10, 12로 둔다
3. 주어진 numbers 배열을 돌면서 n이 1,4,7에 있으면 왼손, 3,6,9에 있으면 오른손
4. n이 그외의 숫자라면 2,5,8,0 (n이 0 이면 11로, 아니면 n으로) 일때 처리
5. n과 마지막 누른 번호와의 거리의 절댓값을 구한다.
6. 만약 n이 2이고 lastL이 7인 경우를 생각해보자. absL은 5가 되고 키패드 상에서의 움직여야하는 거리는 좌우로는 +-1칸, 위아래로는 +-3 일 것이다. 그러므로 absL을 3으로 나눈 나머지와 몫을 더하면 키패드 상의 거리를 구할 수 있다. 이를 가지고 왼손, 오른손 판단을 한다.
7. 그 이외의 경우로 두 엄지손가락의 거리가 같으면 hand를 사용해 키패드를 누른다.
def solution(numbers, hand):
answer = ''
lastL = 10
lastR = 12
for n in numbers:
if n in [1,4,7]:
answer += 'L'
lastL = n
elif n in [3,6,9]:
answer += 'R'
lastR = n
else:
n = 11 if n == 0 else n
absL = abs(n - lastL)
absR = abs(n - lastR)
if sum(divmod(absL, 3)) > sum(divmod(absR, 3)):
answer += 'R'
lastR = n
elif sum(divmod(absL, 3)) < sum(divmod(absR, 3)):
answer += 'L'
lastL = n
else:
if hand == 'left':
answer += 'L'
lastL = n
else:
answer += 'R'
lastR = n
return answer
'Algorithm > Programmers' 카테고리의 다른 글
[Python] 최솟값 만들기 (0) | 2021.07.31 |
---|---|
[Python] 행렬의 곱셈 (0) | 2021.07.20 |
[Python] 숫자 문자열과 영단어 (0) | 2021.07.09 |
[Python] 2019 KAKAO BLIND RECRUITMENT 실패율 (0) | 2021.07.08 |
[Python] 2018 KAKAO BLIND RECRUITMENT [1차] 비밀지도 (0) | 2021.07.08 |