728x90
반응형
https://programmers.co.kr/learn/courses/30/lessons/67256?language=python3
최종 코드
def solution(numbers, hand):
keypad = {1:['L', [0, 0]], 4:['L', [0, 1]], 7:['L', [0, 2]], 3:['R', [2, 0]], 6:['R', [2, 1]], 9:['R', [2, 2]], 2:['LR', [1, 0]], 5:['LR', [1, 1]], 8:['LR', [1, 2]], 0:['LR', [1, 3]]}
left = [0, 3]
right = [2, 3]
answer = ''
for n in numbers:
if keypad[n][0] == 'L':
answer += keypad[n][0]
left = keypad[n][1]
elif keypad[n][0] == 'R':
answer += keypad[n][0]
right = keypad[n][1]
else:
l_dis = abs(left[0]-keypad[n][1][0]) + abs(left[1]-keypad[n][1][1])
r_dis = abs(right[0]-keypad[n][1][0]) + abs(right[1]-keypad[n][1][1])
if l_dis == r_dis:
if hand == 'right':
answer += 'R'
right = keypad[n][1]
else:
answer += 'L'
left = keypad[n][1]
elif l_dis < r_dis:
answer += 'L'
left = keypad[n][1]
else:
answer += 'R'
right = keypad[n][1]
return answer
풀이 과정
풀이 시간 14분
def solution(numbers, hand):
#keypad[n] = [손가락, [x, y]]
#손가락 = 키패드의 숫자를 누르는데 사용하는 손가락, 'L'-왼손, 'R'-오른손, 'LR' = 왼손 또는 오른손
#[x, y] = 키패드를 2차원 배열로 나타냈을 때 숫자 n의 위치
keypad = {1:['L', [0, 0]], 4:['L', [0, 1]], 7:['L', [0, 2]], 3:['R', [2, 0]], 6:['R', [2, 1]], 9:['R', [2, 2]], 2:['LR', [1, 0]], 5:['LR', [1, 1]], 8:['LR', [1, 2]], 0:['LR', [1, 3]]}
#현재 왼손과 오른손이 있는 위치, 처음에 왼손은 '*'이 있는 위치, 오른손은 '#'이 있는 위치에 있다
left = [0, 3]
right = [2, 3]
answer = ''
for n in numbers:
#숫자 n을 누르는 손가락이 'L'인 경우, 왼손의 위치를 해당 숫자의 위치로 바꿔준다
if keypad[n][0] == 'L':
answer += keypad[n][0]
left = keypad[n][1]
#숫자 n을 누르는 손가락이 'R'인 경우, 오른손의 위치를 해당 숫자의 위치로 바꿔준다
elif keypad[n][0] == 'R':
answer += keypad[n][0]
right = keypad[n][1]
#숫자 n을 누르는 손가락이 'LR'인 경우,
else:
#숫자의 위치와 현재 손의 위치의 차를 통해 왼손과 오른손 거리를 구한다
l_dis = abs(left[0]-keypad[n][1][0]) + abs(left[1]-keypad[n][1][1])
r_dis = abs(right[0]-keypad[n][1][0]) + abs(right[1]-keypad[n][1][1])
#왼손과 오른손 거리가 같은 경우,
if l_dis == r_dis:
#오른손잡이이면, 오른손으로 누르고 오른손의 위치를 숫자 n의 위치로 바꿔준다
if hand == 'right':
answer += 'R'
right = keypad[n][1]
#왼손잡이이면, 왼손으로 누르고 왼손의 위치를 숫자 n의 위치로 바꿔준다
else:
answer += 'L'
left = keypad[n][1]
#왼손거리가 더 가까운 경우, 왼손으로 누르고 왼손의 위치를 숫자 n의 위치로 바꿔준다
elif l_dis < r_dis:
answer += 'L'
left = keypad[n][1]
#오른손거리가 더 가까운 경우, 오른손으로 누르고 오른손의 위치를 숫자 n의 위치로 바꿔준다
else:
answer += 'R'
right = keypad[n][1]
return answer
#시간복잡도 = O(len(numbers)) = O(n), 공간복잡도 = O(n)
참고
- 3. 보석 쇼핑 -> https://hwayomingdlog.tistory.com/136
- 5. 동굴 탐험 ->
728x90
반응형
'코테 노트 > 프로그래머스' 카테고리의 다른 글
Level 1 크레인 인형뽑기 게임 <2019 카카오 인턴> Python 3 (0) | 2021.08.30 |
---|---|
Level 3 표 편집 <2021 카카오 인턴십> Python 3 (0) | 2021.08.27 |
Level 3 보석 쇼핑 <2020 카카오 인턴십> Python 3 (0) | 2021.08.23 |
Level 1 숫자 문자열과 영단어<2021 카카오 인턴십> Python 3 (0) | 2021.08.20 |
Level 3 줄서는 방법 Python3 (0) | 2021.08.13 |