파이썬 Stack Que

최보훈·3일 전
0

파이썬

목록 보기
2/2

Stack

LIFO - last in First out / 가장 마지막에 삽입된 데이터가 가장 먼저 나오는 구조
ex) 그릇 쌓아놓기

삽입 - append
삭제 - pop
탑 데이터를 확인 - stack[-1]

활용되는 알고리즘

  • 깊이우선 탐색(DFS)
  • 백트래킹

Que

FIFO - First in First out / 가장 먼저 삽임된 데이터가 가장 먼저 나가는 구조
선입선출

삽입 - append
최선입 삭제 - popleft
최선입 데이터 확인 - Que[0]

rear - 큐의 가장 끝 데이터
front - 큐의 가장 앞의 데이터

활용되는 알고리즘

  • 너비 우선 탐색(BFS)

우선순위큐

들어간 순서에 상관 없이 우선순위가 높은 데이터가 먼저 나오는 구조

문제풀이

  1. 같은 숫자는 싫어
def solution(arr):
    answer = []
    n = None;
    for value in arr:
        if(value != n):
            answer.append(value)
        n = value
    return answer
  1. 올바른 괄호
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
  1. 기능개발
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
  1. 프로세스
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
  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

0개의 댓글