2024. 10. 9. 21:35ㆍ코드리뷰
공부하는허딩크 : https://www.youtube.com/live/Xx_DRXY3r2Q?feature=shared
<첫번째 시도 : 시간초과>
아직 deque라이브러리 공부하기 전 상태로 아래의 코드로 제출했더니 시간초과가 발생
list를 set으로 바꿔서 사용하여 시간초과를 해결해 보려고 했으나 불가능함
set은 기본적으로 remove(keyerror발생), discard, add를 활용할 수 있으나 반환값이 없어 아래 형식의 코드로 불가능
<두번째 시도 : 맞았습니다.>
deque라이브러리 활용.
※ Collections모듈에서 제공하는 deque 자료구조 (double-ended queue) : 양쪽 끝에서 삽입과 삭제가 가능한 자료구조
큐는 FIFO (First In First Out) 구조로, 먼저 들어온 데이터가 먼저 나가는 방식입니다. 주로 대기열 시스템, 작업 스케줄링 등에서 사용됩니다.
1. 특징
- 양쪽 끝에서 삽입/삭제: deque는 양쪽 끝에서 O(1) 시간 복잡도로 삽입과 삭제를 할 수 있습니다. 이는 리스트의 경우 O(n) 시간이 걸리는 것과 큰 차이가 있습니다.
- 순서 유지: deque는 삽입된 순서대로 요소를 유지합니다. 따라서, 순서가 중요한 데이터 구조를 구축할 때 유용합니다.
- 고정 크기: deque는 고정 크기로 설정할 수 있지만, 기본적으로 크기에 제한이 없습니다.
2. 사용법
deque를 사용하기 위해서는 collections 모듈에서 import 해야 합니다.
3. 기본 메서드
deque에서 자주 사용하는 메서드는 다음과 같습니다
1. 생성자:
2. 삽입:
append: 오른쪽 끝에 추가
appendleft: 왼쪽 끝에 추가
3. 삭제:
pop: 오른쪽 끝에서 제거
popleft: 왼쪽 끝에서 제거
4. 길이:
len: deque의 길이
5. 확인:
in: 요소가 있는지 확인
4. 예제
아래는 deque를 사용하는 간단한 예제입니다:
※ Python에서는 큐(Queue), 스택(Stack), 버퍼(Buffer)와 같은 데이터 구조를 구현하기 위해 다양한 내장 라이브러리와 모듈을 제공합니다. 아래에 각 데이터 구조를 구현하는 라이브러리 활용 방법을 설명하겠습니다.
1. 큐 (Queue)
Python에서는 queue 모듈을 사용하여 큐를 구현할 수 있습니다. 이 모듈은 스레드 안전성을 보장하는 큐를 제공합니다.
사용 예시
다른 유형의 큐
queue 모듈은 다음과 같은 다른 유형의 큐도 제공합니다:
- 우선순위 큐: PriorityQueue
- FIFO 큐: Queue
- LIFO 큐: LifoQueue
우선순위 큐 예시
2. 스택 (Stack)
Python에서는 스택을 구현하기 위한 전용 모듈은 없지만, 리스트를 사용하거나 collections 모듈의 deque를 사용하여 스택을 쉽게 구현할 수 있습니다.
리스트를 사용한 스택
collections.deque를 사용한 스택
3. 버퍼 (Buffer)
Python에는 기본적으로 버퍼를 위한 전용 모듈은 없지만, 리스트 또는 collections.deque를 사용하여 버퍼를 구현할 수 있습니다. 그러나, 입출력 관련 작업에 대한 버퍼는 io 모듈에서 사용할 수 있습니다.
io 모듈을 사용한 버퍼 예시
요약
- 큐(Queue): queue 모듈을 사용하여 다양한 유형의 큐(기본 큐, 우선순위 큐, LIFO 큐 등)를 쉽게 구현할 수 있습니다.
- 스택(Stack): 리스트 또는 collections.deque를 사용하여 스택을 구현할 수 있습니다.
- 버퍼(Buffer): 데이터의 임시 저장을 위해 io 모듈을 사용하여 메모리 내의 버퍼를 구현할 수 있습니다.
이렇게 다양한 라이브러리를 활용하여 큐, 스택, 버퍼를 쉽게 구현하고 사용할 수 있습니다.
※ class구조 : Queue, Stack, Buffer
큐(Queue), 스택(Stack), 버퍼(Buffer)는 각각 데이터 구조를 다루는 방법입니다. 이들은 컴퓨터 과학에서 다양한 문제를 해결하는 데 사용됩니다. 각각의 구조에 대한 정의와 사용 방법을 아래에 자세히 설명하겠습니다.
1. 큐 (Queue)
정의
큐는 FIFO (First In First Out) 구조로, 먼저 들어온 데이터가 먼저 나가는 방식입니다. 주로 대기열 시스템, 작업 스케줄링 등에서 사용됩니다.
구현 방법
Python에서는 리스트를 사용하거나 collections 모듈의 deque를 사용할 수 있습니다. deque는 큐의 성능을 높이기 위해 양쪽 끝에서 빠른 삽입과 삭제를 지원합니다.
리스트를 사용한 큐 구현
deque를 사용한 큐 구현
2. 스택 (Stack)
정의
스택은 LIFO (Last In First Out) 구조로, 가장 최근에 들어온 데이터가 가장 먼저 나가는 방식입니다. 주로 재귀적 문제, 함수 호출 관리 등에서 사용됩니다.
구현 방법
스택은 리스트를 사용하여 간단히 구현할 수 있으며, append()와 pop() 메서드를 사용하여 데이터를 추가하고 제거할 수 있습니다.
리스트를 사용한 스택 구현
3. 버퍼 (Buffer)
정의
버퍼는 데이터를 일시적으로 저장하는 용도로 사용되는 메모리 공간입니다. 일반적으로 입출력 작업에서 사용됩니다. 데이터를 일시적으로 저장하여 I/O 작업을 최적화하는 역할을 합니다.
구현 방법
버퍼는 다양한 방식으로 구현될 수 있습니다. 가장 간단한 예로는 리스트를 사용하여 데이터를 저장하고, 지정된 크기를 초과하면 데이터를 처리하는 방식을 사용할 수 있습니다.
버퍼 구현 예시
요약
- 큐(Queue): FIFO 구조로 데이터를 처리하며, enqueue로 데이터를 추가하고 dequeue로 데이터를 제거합니다. deque를 사용하면 성능이 향상됩니다.
- 스택(Stack): LIFO 구조로 데이터를 처리하며, push로 데이터를 추가하고 pop으로 데이터를 제거합니다. peek 메서드를 통해 꼭대기 요소를 확인할 수 있습니다.
- 버퍼(Buffer): 데이터를 일시적으로 저장하는 용도로 사용되며, 입력 및 출력을 최적화하는 데 유용합니다. 데이터 추가 및 처리 방법을 정의하여 사용할 수 있습니다.
이러한 구조들은 다양한 알고리즘과 데이터 처리 문제에서 기본적인 도구로 사용됩니다.
'코드리뷰' 카테고리의 다른 글
[python_파이썬_pass]백준_9012번_괄호_실버4_풀이 (1) | 2024.10.10 |
---|---|
[python_파이썬_참고pass]백준_4949번_균형잡힌세상_실버4_풀이 (0) | 2024.10.09 |
[python_파이썬_pass]백준_7568번_덩치_실버5_풀이 (0) | 2024.10.07 |
[python_파이썬_pass]백준_1676번_팩토리얼 0의 개수_실버5_풀이 (0) | 2024.10.07 |
[python_파이썬_pass]백준_28702번_FizzBuzz_브론즈1_풀이 (0) | 2024.10.07 |