728x90
300x250
코테를 풀면서 DFS, BFS관련 문제를 풀 때 앞뒤 안가리고
for구문과 if구문으로 설계를 하여 효율이 매번 낮게 나왔습니다.
이제는 조금 코딩다운 코딩을 해보고자 파이썬의 여러 모듈들을 배울 겸 작성해보도록 하겠습니다.
보통 Queue(큐)는 FIFO(선입선출)방식으로 작동하는데 Deque(데크)는 양방향의 Queue(큐)라고 생각하시면 편합니다.
즉 양 방향에서 추가하거나 제거할 수 있습니다.
그렇기에 append와 pop이 압도적으로 빠릅니다.
from collections import deque
deq = deque()
deq.append('hi') # hi를 데크의 오른쪽 끝에 삽입한다.
deq.appendleft('hi') # append의 왼쪽 버전
deq.pop() # 데크의 오른쪽 끝 요소를 가져옴과 동시에 삭제한다.
deq.popleft() # pop의 왼쪽 버전
deq.extend(array) # 배열(array)를 순환하면서 데크의 오른쪽 끝에 추가한다
deq.extendleft(array) # extend의 왼쪽 버전
deq.remove('hi') # 데크에 있는 hi를 찾아서 삭제한다.
deq.rotate(num) # 데크에 num만큼 회전한다. (양수면 오른쪽, 음수면 왼쪽)
몇 개는 설명만 보고도 이해할 수 있지만 이해가 안되는 명령어들도 있길래 직접 해봤습니다.
먼저 append와 extend의 차이와 rotate는 아래의 코드를 보고 한 번에 이해하실 수 있습니다.
from collections import deque
deq = deque()
deq.append('hi')
# => deque(['hi'])
deq.extend('hi')
# => deque(['hi', 'h', 'i'])
deq.extendleft('hi')
# => deque(['i', 'h', 'hi', 'h', 'i'])
deq.rotate(1)
# => deque(['i', 'i', 'h', 'hi' 'h'])
deq.rotate(-2)
# => deqie(['h', 'hi', 'h', 'i', 'i'])
즉 append는 문자열 그대로 deque에 넣고
extend는 문자열을 하나씩 모든 항목을 넣습니다.
특히 extendleft는 문자열의 하나씩 왼쪽부터 넣기 때문에 순서를 헷갈리기 쉽습니다.
rotate는 인자가 양수면 오른쪽으로, 음수면 왼쪽으로 회전을 시킵니다.
반복해서 pop을 사용하거나 할 때 for구문 여러번쓰는 것을 rotate로 사용할 수도 있다고 생각합니다.
또한 Deque(데크)자체가 리스트 보다 월등한 옵션이며 연산 속도가 빠르기에 Deque(데크)를 사용하는
습관을 들여야할 것 같습니다.
728x90
300x250
'Python' 카테고리의 다른 글
Pipenv 명령어 모음 (0) | 2022.03.15 |
---|---|
파이썬-실습(12) HTML로 파일 log내용 확인하기 (0) | 2022.01.12 |
파이썬-실습(11) 카카오 챗봇과 앱의 연계 (0) | 2021.12.17 |
파이썬-실습(10) 카카오톡 친구들에게 API로 메시지 보내기 (0) | 2021.12.17 |
파이썬-실습(9) 가변적인 Url 파싱하기, 카카오 인가코드 파싱 (0) | 2021.12.17 |