코드
def solution(numbers, direction):
answer = [0] * len(numbers)
for i in range(len(numbers)):
if direction == 'right':
answer[(i+1) % len(numbers)] = numbers[i]
else:
answer[(i-1) % len(numbers)] = numbers[i]
return answer
주어진 배열 numbers를 direction이 right이면 오른쪽으로 1칸, left이면 왼쪽으로 1칸씩 이동시키는 문제이다.
right인 경우에는 기존 인덱스에서 + 1을 해주고 % len(numbers)을 하면 오른쪽으로 한 칸씩 이동했을 때의 인덱스를 구할 수 있다.
left인 경우에는 기존 인덱스에서 - 1을 해주고 % len(numbers)을 하면 한 칸씩 왼쪽으로 이동했을 때의 인덱스를 구할 수 있다.
* 이때 인덱스가 -1이면 배열의 마지막을 의미한다.
다른 코드 - 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를 import 해주고 rotate 메소드를 이용하여 1(=오른쪽 한 칸), -1(=왼쪽 한 칸)을 해주면 쉽게 원하는 결과를 얻을 수 있다.
처음부터 데큐를 생각하지 못한 점이 아쉽게 느껴진다.
반응형