자료구조&알고리즘/프로그래머스
[프로그래머스] 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
어케 이런생각을..