티스토리 뷰

728x90

문제

정수가 담긴 배열 numbers와 문자열 direction가 매개변수로 주어집니다. 배열 numbers의 원소를 direction방향으로 한 칸씩 회전시킨 배열을 return하도록 solution 함수를 완성해주세요.

 

제한사항

  • 3 ≤ numbers의 길이 ≤ 20
  • direction은 "left" 와 "right" 둘 중 하나입니다.

 

입출력 예

 

 

해당 문제 풀이 방법

- 단순하게 리스트의 배열 위치만 바꾸면 되는 문제라 생각하였음. left일 경우와 right일 경우, 배열의 제일 첫 번째 또는 마지막 원소를 뽑아내고, 나머지 원소들과 재배열 하면 된다고 생각했음

 

def solution(numbers, direction):
    array = []
    n = len(numbers)
    if direction == "left":
        array = numbers[1:]
        array.append(numbers[0])
    else:
        array.append(numbers[-1])
        array.extend(numbers[0:n-1])
    return array

 

내가 쓴 코드. 여기서 리스트에 append하면 '[]' 리스트 자체로 들어가서 extend를 사용하는 것이 더 적절해 보임

 

더 간단한 코드

def solution(numbers, direction):
    return [numbers[-1]] + numbers[:-1] if direction == 'right' else numbers[1:] + [numbers[0]]

 

훨씬 더 간결하고 한눈에 보기 쉬움

 

그 다음에 해당 문제를 풀 때 deque를 이용하고 싶었으나 하지 못했음. 다른 사람 풀이가 있었음

from collections import deque

def solution(numbers, direction):
    numbers = deque(numbers)
    if direction == 'right':
        numbers.rotate(1)
    else:
        numbers.rotate(-1)
    return list(numbers)

 

자료 구조 deque(큐)를 사용하면 rotate method가 사용이 가능하다. 마지막엔 list로 변환 시켜주면 되는 간단한 코드임

 

 

 

728x90
댓글