728x90
반응형
문제 살펴보기!
문제 링크 : https://www.acmicpc.net/problem/18258
반응형
솔루션 살펴보기!!
import sys
from collections import deque
def input():
return sys.stdin.readline().rstrip()
queue = deque()
commands = {
'push': lambda x: queue.append(x),
'pop': lambda: print(queue.popleft() if queue else -1),
'size': lambda: print(len(queue)),
'empty': lambda: print(0 if queue else 1),
'front': lambda: print(queue[0] if queue else -1),
'back': lambda: print(queue[-1] if queue else -1)
}
N = int(input())
for _ in range(N):
com = input().split()
if com[0] == 'push':
commands['push'](com[1])
else:
commands[com[0]]()
이 코드는 큐(Queue) 자료구조를 사용하여 다양한 명령어를 처리하는 프로그램입니다. 각 명령어에 따라 큐에 데이터를 추가하거나 제거하고, 큐의 상태를 확인하는 작업을 수행합니다. 각 단계와 중요한 개념을 설명드리겠습니다.
단계별 동작 설명
필요한 모듈 임포트
import sys
from collections import deque
- sys: 표준 입력을 빠르게 처리하기 위해 사용됩니다. 특히, 많은 양의 입력이 있을 때 sys.stdin.readline()을 사용하면 속도가 향상됩니다.
- deque: collections 모듈의 deque는 양방향 큐(덱) 자료구조로, 큐의 앞뒤에서 빠르게 데이터를 추가하거나 제거할 수 있습니다.
input() 함수 재정의
def input():
return sys.stdin.readline().rstrip()
- 입력을 빠르게 받기 위해 sys.stdin.readline()을 사용합니다.
- rstrip()은 입력의 끝에 붙은 개행 문자(\n)를 제거합니다.
큐 및 명령어 함수 딕셔너리 초기화
queue = deque()
commands = {
'push': lambda x: queue.append(x),
'pop': lambda: print(queue.popleft() if queue else -1),
'size': lambda: print(len(queue)),
'empty': lambda: print(0 if queue else 1),
'front': lambda: print(queue[0] if queue else -1),
'back': lambda: print(queue[-1] if queue else -1)
}
- queue = deque()를 통해 빈 큐를 생성합니다.
- commands 딕셔너리는 명령어와 그에 대응하는 함수(또는 람다 함수)를 매핑합니다. 각 명령어에 맞는 동작을 이 딕셔너리에서 호출합니다.
명령어 수 입력 및 처리
N = int(input())
for _ in range(N):
com = input().split()
if com[0] == 'push':
commands['push'](com[1])
else:
commands[com[0]]()
- N = int(input()): 처리할 명령어의 수를 입력받습니다.
- for _ in range(N): 루프를 통해 각 명령어를 차례로 처리합니다.
- com = input().split(): 명령어를 입력받고, 공백으로 분리하여 리스트로 만듭니다. 예를 들어, push 1이라는 입력이 들어오면 com은 ['push', '1']가 됩니다.
- if com[0] == 'push':에서 push 명령어는 추가적인 인자를 필요로 하므로, commands['push'](com[1])를 호출하여 인자 com[1]을 큐에 추가합니다.
- else:에서는 push를 제외한 명령어에 대해 딕셔너리에서 해당 함수를 호출합니다. 예를 들어, pop 명령어는 commands['pop']()을 호출하여 실행됩니다.
728x90
중요한 개념 설명
- 큐(Queue) 자료구조
- 큐는 선입선출(FIFO: First In, First Out) 원칙을 따르는 자료구조입니다. 가장 먼저 들어온 데이터가 가장 먼저 나갑니다. 이 코드는 deque를 사용하여 큐를 구현하고 있습니다.
- 딕셔너리와 람다 함수 사용
- commands 딕셔너리는 명령어를 키로, 해당 명령어를 처리할 람다 함수를 값으로 저장하고 있습니다. 이는 코드의 가독성을 높이고, 명령어에 따른 동작을 일관되게 처리할 수 있는 장점이 있습니다.
- 람다 함수는 간단한 함수들을 빠르게 정의할 수 있는 방법입니다. 예를 들어, lambda x: queue.append(x)는 인자로 받은 x를 큐에 추가하는 역할을 합니다.
- 조건문과 함수 호출
- if com[0] == 'push':에서는 push 명령어만 따로 처리하고, 나머지 명령어는 commands 딕셔너리에서 해당 함수를 호출합니다. 이를 통해 코드가 간결해지고, 함수 호출이 일관되게 이루어집니다.
728x90
반응형
'알고리즘' 카테고리의 다른 글
백준 알고리즘 문제 풀이 가이드: 코딩 면접 대비 완벽 준비-10866 덱(Deque) 편 (python) (0) | 2024.09.02 |
---|---|
백준 알고리즘 문제 풀이 가이드: 코딩 면접 대비 완벽 준비-2164 카드2 편 (python) (0) | 2024.08.30 |
백준 알고리즘 문제 풀이 가이드: 코딩 면접 대비 완벽 준비-1158 요세푸스 편 (python) (0) | 2024.08.29 |
백준 알고리즘 문제 풀이 가이드: 코딩 면접 대비 완벽 준비-9012 괄호 편 (python) (0) | 2024.08.28 |
백준 알고리즘 문제 풀이 가이드: 코딩 면접 대비 완벽 준비-10828 스택 편 (python) (0) | 2024.08.27 |