자료구조&알고리즘/프로그래머스

[프로그래머스] Lv.0 배열 회전시키기 (dequeue함수)

celinayk 2024. 5. 4. 18:15
반응형
def solution(numbers, direction):
    n = len(numbers)
    if direction == 'right':
        tmp = numbers[-1]
        for i in range(n-1, 0, -1):
            numbers[i]=numbers[i-1]
        numbers[0]=tmp
    else:
        tmp = numbers[0]
        for i in range(n-1):
            numbers[i]=numbers[i+1]
        numbers[-1]=tmp
    return numbers

 

풀이

오른쪽으로 이동시켜야할때는

마지막 요소가 -> 맨 처음으로 가야하는걸 신경써야하고

 

왼쪽으로 이동시켜야할때는

맨처음 요소가 -> 맨 마지막으로 가야한ㄷㅏ

 

그래서 각각 tmp에 마지막 요소들을 임시로 담아두고

마지막에 넣어준다 

그리고 각 반복문은 마지막 인덱스빼고 실행한다

 

 

새로배운 함수 dequeue

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를 사용하면 deque형으로 바뀌기 때문에 list로 변환 해주고 return 해준다.

 

deque 함수는 큐에 제한되어 있는 선입선출 제한을 풀어서, 더 여러곳에 사용할 수 있도록 한 함수

장점 

  • 속도가 리스트에 비해 굉장히 빠르다. List = O(n), deque = O(1)

사용하는 함수

  • appendleft : 왼쪽에 개체를 추가합니다.
  • extendleft : 왼쪽에 리스트를 연장합니다.
  • maxlen : 큐의 길이를 반환합니다.
  • popleft : 큐의 맨 왼쪽에 있는 개체를 반환합니다.
  • rotate : 큐를 회전합니다.

함수안에 음수 를 넣게 된다면 왼쪽회전 양수 오른쪽회전이다.

 

또 다른 풀이

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

어케 이런생각을..