[백준] 24551 queuestack

Hyun·2024년 3월 15일
0

백준

목록 보기
55/81
post-thumbnail



풀이

큐와 스택을 모두 구현

from collections import deque
qsnum = int(input())
qsstate= list(map(int,input().split()))
valstatet = list(map(int,input().split()))
valnum = int(input())
valarr = list(map(int,input().split()))
qsarr = [deque() for _ in range(qsnum)]
ans = []

for i in range(qsnum): # 큐 & 스택에 초기값 할당
    qsarr[i].append(valstatet[i])
for i in range(valnum): # 삽입할 원소가 담긴 배열
    for j in range(qsnum): # 큐 & 스택의 리스트를 돎
        if j == 0: qsarr[0].append(valarr[i]) # 첫번째 자료구조
        if j >= 1: # 두번째부터의 자료구조
            if qsstate[j-1] == 0: # 직전이 큐인 경우
                qsarr[j].append(qsarr[j-1].popleft())
            elif qsstate[j-1] == 1: # 직전이 스택인 경우
                qsarr[j].append(qsarr[j-1].pop())
    # 마지막 자료구조 형태보고 값 꺼내서 저장
    if qsstate[-1] == 0: 
        ans.append(str(qsarr[-1].popleft()))
    else:
        ans.append(str(qsarr[-1].pop()))
    for sq in qsarr: print(sq)
print(" ".join(ans))

큐 하나로 구현

스택은 직전의 자료구조로부터 받은 값을 그대로 넘겨주기 때문에 사용하지 않아도 된다. 큐는 여러 개 있을 경우 역순으로 합치면 하나의 큐로 사용이 가능하다. 예를 들어 3개의 큐 [3], [4], [5] 가 있을 경우 [5, 4, 3] 으로 합칠 수 있다.

신박하다..

from collections import deque
n = int(input())
qslist = list(map(int, input().split()))
vallist = list(map(int,input().split()))
m = int(input())
inputList = list(map(int,input().split()))

queue = deque()
for i in range(len(qslist)-1,-1,-1): # 역순으로 큐들의 값을 하나의 큐로 옮김
    if qslist[i] == 0:
        queue.append(vallist[i])
for i in range(m): # 하나의 큐에 값들을 삽입함
    queue.append(inputList[i])
for i in range(m): # 하나의 큐에서 값들을 출력
    print(queue[i], end=" ")
profile
better than yesterday

0개의 댓글