문제 접근 및 공부 내용, 풀이는 모두 하단 코드에 "주석"으로 포함되어 있으니 참고해주세요.
문제 유형 보기
더보기
스택, 덱
https://dailyalgo.kr/ko/problems/81
https://dailyalgo.kr/ko/problems/82
https://dailyalgo.kr/ko/problems/83
간단한 문제들. 모아서 짤막하게 정리했다.
81. 스택
# 강사님 풀이
def solution(queries):
stack = []
answer = []
for query in queries:
# 'pop'일 경우를 먼저 걸러내는 게 좋다
if query == 'pop': # 'pop'일 경우
# empty stack 조건
# 아래처럼 하는 게 더 파이써닉하다!!
# 컨테이너는 False와 True로 평가되기 때문.
# []는 False로 평가됨.
if stack: # 스택이 비어있지 않으면
answer.append(stack.pop())
else: # 스택이 비어있으면
answer.append(0)
continue
# 이거 if-else로 해도 되지만, indent 줄이기 위해 위처럼 continue
# 로 분기해주는 게 더 보기 좋음.
# 'push'일 경우
operation, num = query.split()
stack.append(int(num))
return answer
82. 큐
def solution(queries):
answer = []
queue = []
# 큐가 비어있으면, pop 시 0을 answer에 추가하면 됨.
for query in queries:
# 'pop'인 경우
if query == 'pop':
if queue: # queue가 비어있지 않으면
answer.append(queue.pop(0))
# 이게 answer.append(queue.pop())면 stack으로 작동함.
else: # queue가 비어있으면
answer.append(0)
continue
# 이제, 'push'인 경우
operation, number = query.split()
queue.append(int(number))
return answer
# 입력 : 쿼리 문자열을 요소로 가지는 리스트
# 출력 : 쿼리 결과(pop 결과)를 요소로 가지는 리스트
83. 덱
from collections import deque
def solution(queries):
queue = deque()
answer = []
for query in queries:
if query == 'removeFirst':
if queue: # 큐가 비어있지 않으면
answer.append(queue.popleft())
else: # 큐가 비어있으면
answer.append(0)
continue
if query == 'removeLast':
if queue:
answer.append(queue.pop())
else:
answer.append(0)
continue
operation, number = query.split()
number = int(number)
if operation == 'addFirst':
queue.appendleft(number)
else:
queue.append(number)
return answer
# 입력 : 수행할 쿼리들이 담긴 문자열 리스트
# 출력 : 쿼리 수행 결과 덱을 의미하는 정수 리스트
'Algorithms and Languages > 파이썬 알고리즘 문제풀이' 카테고리의 다른 글
[Python/백준] 2164. 카드2 (0) | 2025.02.18 |
---|---|
[Python/백준] 10773. 제로 (0) | 2025.02.18 |
[Python/백준] 9291. 스도쿠 채점 (0) | 2025.02.18 |
[Python/DailyAlgo] 71. 이차원 배열의 델타 탐색 1 (0) | 2025.02.18 |
[Python/백준] 20920. 영단어 암기는 괴로워 (0) | 2025.02.17 |