LIFO - last in First out / 가장 마지막에 삽입된 데이터가 가장 먼저 나오는 구조
ex) 그릇 쌓아놓기
삽입 - append
삭제 - pop
탑 데이터를 확인 - stack[-1]
활용되는 알고리즘
FIFO - First in First out / 가장 먼저 삽임된 데이터가 가장 먼저 나가는 구조
선입선출
삽입 - append
최선입 삭제 - popleft
최선입 데이터 확인 - Que[0]
rear - 큐의 가장 끝 데이터
front - 큐의 가장 앞의 데이터
활용되는 알고리즘
들어간 순서에 상관 없이 우선순위가 높은 데이터가 먼저 나오는 구조
- 같은 숫자는 싫어
def solution(arr): answer = [] n = None; for value in arr: if(value != n): answer.append(value) n = value return answer
- 올바른 괄호
def solution(s): answer = True stack=[] for value in s: if(value =="("): stack.append(value) else: if(len(stack) ==0): answer = False else: stack.pop() if(stack !=[]): answer = False return answer
- 기능개발
def solution(progresses, speeds): answer =[] cnt = 0 ans = 0 while(len(progresses)>0): if(progresses[0] + cnt*speeds[0])>=100: ans = ans+1 progresses.pop(0) speeds.pop(0) else: if(ans>0): answer.append(ans) ans =0 cnt = cnt+1 answer.append(ans) return answer
- 프로세스
def solution(priorities, location): compare = [chr(65 + i) for i in range(len(priorities))] char = compare[location] answer = 0 ans=[] while(len(priorities)>0): if(priorities[0]<max(priorities)): priorities.append(priorities[0]) priorities.pop(0) compare.append(compare[0]) compare.pop(0) elif(priorities[0] == max(priorities)): ans.append(compare[0]) priorities.pop(0) compare.pop(0) print(ans) return ans.index(char)+1
- 두 큐 합 같게하기
from collections import deque def solution(queue1, queue2): answer = -1 dq1,dq2 = deque(queue1),deque(queue2) sumq1, sumq2 = sum(queue1),sum(queue2) cnt = 0 for i in range(300000): if(sumq1 == sumq2): answer =cnt break elif(sumq1 < sumq2): sumq1 = sumq1 + dq2[0] sumq2 = sumq2 - dq2[0] dq1.append(dq2[0]) dq2.popleft() cnt = cnt+1 elif(sumq1 > sumq2): sumq1 = sumq1 - dq1[0] sumq2 = sumq2 + dq1[0] dq2.append(dq1[0]) dq1.popleft() cnt = cnt+1 return answer