스택과 큐에 대해 알아보자! 📚
스택(Stack) 🤔
스택은 후입선출(LIFO, Last In First Out) 방식으로 데이터를 처리하는 자료구조입니다. 쉽게 말해, 나중에 넣은 데이터가 먼저 나옵니다. 스택을 사용하는 대표적인 예는 웹 브라우저의 뒤로 가기 기능입니다.
스택의 기본 연산 🌟
push(): 스택의 맨 위에 데이터를 추가합니다. pop(): 스택의 맨 위에 있는 데이터를 제거하고 반환합니다. peek(): 스택의 맨 위에 있는 데이터를 제거하지 않고 반환합니다. isEmpty(): 스택이 비어 있는지 확인합니다.
파이썬에서 스택 구현 💻
파이썬에서는 리스트를 사용해 스택을 쉽게 구현할 수 있습니다.
1stack = []2stack.append(1) # push3stack.append(2)4print(stack) # 출력: [1, 2]5print(stack.pop()) # pop, 출력: 26print(stack) # 출력: [1]큐(Queue) 🤔
큐는 선입선출(FIFO, First In First Out) 방식으로 데이터를 처리하는 자료구조입니다. 쉽게 말해, 먼저 넣은 데이터가 먼저 나옵니다. 큐를 사용하는 대표적인 예는 은행의 대기열 시스템입니다.
큐의 기본 연산 🌟
enqueue(): 큐의 맨 뒤에 데이터를 추가합니다. dequeue(): 큐의 맨 앞에 있는 데이터를 제거하고 반환합니다. peek(): 큐의 맨 앞에 있는 데이터를 제거하지 않고 반환합니다. isEmpty(): 큐가 비어 있는지 확인합니다.
파이썬에서 큐 구현 💻
파이썬에서는 collections.deque를 사용해 큐를 쉽게 구현할 수 있습니다.
1from collections import deque2
3queue = deque()4queue.append(1) # enqueue5queue.append(2)6print(queue) # 출력: deque([1, 2])7print(queue.popleft()) # dequeue, 출력: 18print(queue) # 출력: deque([2])프로그래머스 스택/큐 문제 🚀
문제: 기능개발 📦
문제 설명
소프트웨어 개발 팀에서는 기능 개선 작업을 진행하고 있습니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 각 기능의 개발 속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다.
입력 예시 progresses = [93, 30, 55] speeds = [1, 30, 5]
출력 예시 [2, 1]
1def solution(progresses, speeds):2 import math3 answer = []4 days = [math.ceil((100 - p) / s) for p, s in zip(progresses, speeds)]5 front = 06 7 for i in range(len(days)):8 if days[front] < days[i]:9 answer.append(i - front)10 front = i11 answer.append(len(days) - front)12 13 return answer14
15# 테스트16progresses = [93, 30, 55]17speeds = [1, 30, 5]18print(solution(progresses, speeds)) # 출력: [2, 1]설명 📋
각 기능이 완료되는 날짜를 계산합니다. 앞에서부터 순회하면서 앞 기능보다 더 오래 걸리는 기능이 나올 때까지의 개수를 세어 답에 추가합니다. 마지막 배포 묶음을 답에 추가합니다.
팁 🌟
스택과 큐의 특성을 이해하자: 스택은 후입선출, 큐는 선입선출이라는 기본 개념을 확실히 이해하고 있으면 문제 해결에 큰 도움이 됩니다. 문제의 흐름 파악: 문제를 읽고 흐름을 파악한 뒤, 어떤 자료구조가 적합한지 생각해보세요. 모듈 활용: 파이썬의 collections 모듈이나 리스트의 기본 메서드를 잘 활용하면 구현이 훨씬 수월해집니다.