문제
코딩테스트 연습 - 키패드 누르기
[1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5] "right" "LRLLLRLLRRL" [7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2] "left" "LRLLRRLLLRR" [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] "right" "LLRLLRLLRL"
programmers.co.kr
풀이
- lefts, mids, rights에 해당하는 keypad를 리스트로 나타냄
- '*'과 '#'에 해당하는 index를 사용해서 왼손과 오른손의 위치를 초기화함
- 그리고 숫자 리스트를 돌면서, lefts에 들어있으면 answer에 L을 추가하고 왼손 위치를 lefts의 index를 사용해 변경
- rights에 들어있으면 answer에 R을 추가하고 오른손 위치를 rights의 index를 사용해 변경
- mids에 들어있다면, 왼손과 오른손 인덱스를 사용해서 거리를 계산하고 둘을 비교하여 왼손이나 오른손 위치 변경
코드
def solution(numbers, hand):
answer = ''
lefts, mids, rights = [1, 4, 7, '*'], [2, 5, 8, 0], [3, 6, 9, '#']
left, right = (3, 0), (3, 2)
for num in numbers:
if num in lefts:
answer += 'L'
left = (lefts.index(num), 0)
elif num in rights:
answer += 'R'
right = (rights.index(num), 2)
else:
mid = (mids.index(num), 1)
left_cnt = abs(left[0] - mid[0]) + abs(left[1] - mid[1])
right_cnt = abs(right[0] - mid[0]) + abs(right[1] - mid[1])
if left_cnt < right_cnt or (left_cnt == right_cnt and hand == 'left'):
answer += 'L'
left = mid
else:
answer += 'R'
right = mid
return answer
반응형
'Algorithm > Programmers' 카테고리의 다른 글
[Programmers] Lv1. 모의고사 (0) | 2021.05.14 |
---|---|
[Programmers] Lv1. 크레인 인형뽑기 게임 (0) | 2021.05.14 |
[Programmers] Lv1. 체육복 (0) | 2021.05.12 |
[Programmers] Lv1. K번째수 (0) | 2021.05.12 |
[Programmers] Lv1. 완주하지 못한 선수 (0) | 2021.05.12 |
댓글