본문 바로가기

2021 파이썬 챌린지

2021.07.26 26일차 문제 예시답안

순서대로 누를 번호가 담긴 배열 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