순서대로 누를 번호가 담긴 배열 numbers, 왼손잡이인지 오른손잡이인 지를 나타내는 문자열 hand가 매개변수로 주어질 때, 각 번호를 누른 엄지손가락이 왼손인 지 오른손인 지를 나타내는 연속된 문자열 형태로 return 하도록 solution 함수를 완성해주세요.[제한사항]
- numbers 배열의 크기는 1 이상 1,000 이하입니다.
- numbers 배열 원소의 값은 0 이상 9 이하인 정수입니다.
- hand는 "left" 또는 "right" 입니다.
- "left"는 왼손잡이, "right"는 오른손잡이를 의미합니다.
- 왼손 엄지손가락을 사용한 경우는 L, 오른손 엄지손가락을 사용한 경우는 R을 순서대로 이어붙여 문자열 형태로 return 해주세요.
def solution(numbers, hand):
ans = str()
start_pos = [(3,0),(3,2)] # 시작 왼손 오른손 좌표
pos = [(3,1),(0,0),(0,1),(0,2),(1,0),(1,1),(1,2),(2,0),(2,1),(2,2)] # 각 버튼의 좌표들
left_pos = start_pos[0]
right_pos = start_pos[1] # 현재 왼손과 오른손의 좌표
left_dis = 0
right_dis = 0 # 입력되는 버튼과 현재 손사이의 거리
for i in numbers: # 입력된거를 하나씩 출력
if i == 1 or i == 4 or i == 7: # 왼쪽편 일때
left_pos = pos[i] # 현재의 손 위치 바꿈
ans += "L"
elif i == 3 or i == 6 or i == 9: # 오른쪽편 일때
right_pos = pos[i]
ans += "R"
else:
left_dis = abs(left_pos[0] - pos[i][0]) + abs(left_pos[1] - pos[i][1])
right_dis = abs(right_pos[0] - pos[i][0]) + abs(right_pos[1] - pos[i][1])
# 가운데일 경우 거리를 구한다 여기서 거리는 상하좌우로만 움직인다
if left_dis == right_dis: # 거리가 같을 때
if hand == "right": # 어느 손 잡이인지에 따라서 구분
right_pos = pos[i]
ans += "R"
continue
else:
left_pos = pos[i]
ans += "L"
continue
elif left_dis < right_dis: # 왼손이 더 가까울때
left_pos = pos[i]
ans += "L"
continue
else: # 오른손이 더 가까울 때
right_pos = pos[i]
ans += "R"
continue
return ans
'2021 파이썬 챌린지' 카테고리의 다른 글
2021.07.27 27일차 문제 예시답안 (0) | 2021.07.28 |
---|---|
2021.07.27 27일차 문제 (0) | 2021.07.27 |
2021.07.26 26일차 문제 (0) | 2021.07.26 |
2021.07.25 25일차 문제 예시답안 (0) | 2021.07.26 |
2021.07.25 25일차 문제 (0) | 2021.07.25 |