반응형
포인트
- 항상 문제를 익숙해질 필요가 있다고 생각합니다. 이번 문제는 구현을 하는 문제인데
문제를 읽어보면서 어떻게 작성을 할까?를 고민한 것 같습니다.
그래서 왼손과 오른손 좌표를 저장을 해두고 움직일 때마다 업데이트를 하는 방식으로 구현을 하였습니다.
🧶문서는 항상 수정될 수 있습니다. 비판은 환영합니다.
python
def solution(numbers: list, hand: str) -> str:
answer = ''
left = [3, 0]
right = [3, 2]
mapping = {
1: 'L', 4: 'L', 7: 'L',
3: 'R', 6: 'R', 9: 'R',
2: 'M', 5: 'M', 8: 'M', 0: 'M',
}
for num in numbers:
if mapping[num] == 'M':
pointer = [3, 1] if num == 0 else [num // 3, 1]
left_d = abs(pointer[0] - left[0]) + abs(pointer[1] - left[1])
right_d = abs(pointer[0] - right[0]) + abs(pointer[1] - right[1])
if left_d < right_d:
left = pointer
answer += 'L'
elif left_d > right_d:
right = pointer
answer += 'R'
else:
if hand == 'right':
right = pointer
answer += 'R'
else:
left = pointer
answer += 'L'
elif mapping[num] == 'L':
answer += 'L'
left = [num // 3, 0]
elif mapping[num] == 'R':
answer += 'R'
right = [(num - 1) // 3, 2]
return answer
print("LRLLLRLLRRL" == solution([1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5], 'right'))
print("LRLLRRLLLRR" == solution([7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2], 'left'))
print("LLRLLRLLRL" == solution([1, 2, 3, 4, 5, 6, 7, 8, 9, 0], 'right'))
반응형
'알고리즘' 카테고리의 다른 글
[알고리즘] Determine if String Halves Are Alike (0) | 2021.04.07 |
---|---|
[알고리즘] Minimum Operations to Make Array Equal (0) | 2021.04.06 |
[알고리즘] 수영장 (0) | 2021.04.05 |
[알고리즘] 숫자 만들기 (0) | 2021.04.05 |
[알고리즘] 전위, 중위, 후위 순회 (Traverse) (0) | 2021.04.05 |
댓글