배열 회전시키기
문제 설명
정수가 담긴 배열 numbers와 문자열 direction가 매개변수로 주어집니다. 배열 numbers의 원소를 direction방향으로 한 칸씩 회전시킨 배열을 return하도록 solution 함수를 완성해주세요.
제한사항
- 3 ≤ numbers의 길이 ≤ 20
- direction은 "left" 와 "right" 둘 중 하나입니다.
입출력 예 설명
입출력 예 #1
- numbers 가 [1, 2, 3]이고 direction이 "right" 이므로 오른쪽으로 한 칸씩 회전시킨 [3, 1, 2]를 return합니다.
입출력 예 #2
- numbers 가 [4, 455, 6, 4, -1, 45, 6]이고 direction이 "left" 이므로 왼쪽으로 한 칸씩 회전시킨 [455, 6, 4, -1, 45, 6, 4]를 return합니다.
내가 작성한 코드
def solution(numbers, direction):
if direction == "right":
element = numbers.pop(-1)
numbers.insert(0,element)
elif direction == "left":
element = numbers.pop(0)
numbers.append(element)
return numbers
-> 자료구조와 알고리즘을 적용하지 않은 자의 최후 ..ㅠㅠ
다른 사람이 작성한 코드
from collections import deque
def solution(numbers, direction):
numbers = deque(numbers)
if direction == 'right':
numbers.rotate(1)
else:
numbers.rotate(-1)
return list(numbers)
=> 딱 봐도 이게 정석으로 보이네욥 ㅠㅠ!
회고
정석으로 보이지만 내 답이 틀린것만은 아님.
하지만 더 좋은 성능과 최적화된 연산속도를 위해서라면 공부해야함. 주의주의
알고리즘과 자료구조는 틈틈히 기록 및 공부하도록 해야함.
큐와 데크
- 큐는 선입선출 방식으로 작동한다.
- 데크는 양방향 큐이다.
데크 구조
- 이중연결 리스트 구현
- 리스트의 pop(0)은 시간복잡도가 O(n) / 데크의 popleft는 O(1) 이기 때문에 성능차이가 큼
- 스택처럼 사용할 수도 있고, 큐 처럼 사용할 수도 있음
- 최적화된 연산 속도를 제공함
- 데크는 특히 push/pop 연산이 빈번한 알고리즘에서 리스트보다 월등한 속도를 보여줌
from collections import deque
deque.append(item): item을 데크의 오른쪽 끝에 삽입한다.
deque.appendleft(item): item을 데크의 왼쪽 끝에 삽입한다.
deque.pop(): 데크의 오른쪽 끝 엘리먼트를 가져오는 동시에 데크에서 삭제한다.
deque.popleft(): 데크의 왼쪽 끝 엘리먼트를 가져오는 동시에 데크에서 삭제한다.
deque.extend(array): 주어진 리스트를 데크의 오른쪽에 추가한다.
deque.extendleft(array): 주어진 리스트를 데크의 왼쪽에 추가한다.
deque.remove(item): item을 데크에서 찾아 삭제한다. (제일 처음 나온 해당 string만 제거됨)
deque.clear(): 해당 deque 전체 삭제
deque.reverse(): 말그대로 역순으로 정렬한다.
deque.rotate(num): 데크를 num만큼 회전한다(양수면 오른쪽, 음수면 왼쪽).
참고 블로그
https://velog.io/@harper9808/deque%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80
'CodingTest > 프로그래머스 (미운영)' 카테고리의 다른 글
| [프로그래머스 Lv.0] 소인수분해 (0) | 2025.08.01 |
|---|---|
| [프로그래머스 Lv.0] 모음 제거 (0) | 2025.08.01 |
| [프로그래머스 Lv.0] 팩토리얼 (0) | 2025.08.01 |
| [프로그래머스 Lv.0] 합성수 찾기 (4) | 2025.08.01 |
| [프로그래머스 Lv.0] 공 던지기 (0) | 2025.07.31 |