[BOJ] 24511: questack

이슬비·2023년 12월 18일
0

Algorithm

목록 보기
110/110
post-thumbnail

몇주만이지 ...?

1. 내 풀이: 실패

import sys
from collections import deque
input = sys.stdin.readline

class que(deque):
    def pop(self):
        return self.popleft()

N = int(input())
A = list(map(int, input().rstrip().split()))
B = list(map(int, input().rstrip().split()))
M = int(input())
C = list(map(int, input().rstrip().split()))

questack = [que() if A[i] == 0 else list() for i in range(len(A))]
for i in range(len(B)):
    questack[i].append(B[i])

result = []
for i in range(M):
    questack[0].append(C[i])
    for j in range(len(A)-1):
        x = questack[j].pop()
        questack[j+1].append(x)
    result.append(questack[-1].pop())

print(' '.join(map(str, result)))

정직하게 문제에서 설명하는대로 stack 추가하고 queue를 추가한 방법 ㅎㅎ
당연히 시간 초과가 날 줄 알았는데 역시 ...!

대신 class 상속 받아서 override 하는 방법을 알게 되었으니 만족 ><

2. 다른 풀이

import sys
from collections import deque
input = sys.stdin.readline


N = int(input())
sequence_A = list(map(int, input().split())) ## queue == 0, stack == 1
sequence_B = list(map(int, input().split())) ## i번 자료구조에 들어있는 원소
M = int(input())                             ## 삽입할 수열의 길이
sequence_C = list(map(int, input().split())) ## 삽입할 수열

## 스택은 무시하고 큐만 deque에 추가하기
queue = deque([])
for i in range(N):
  if sequence_A[i] == 0:
    queue.appendleft(sequence_B[i])
else:
  if queue == []:
    print(*sequence_C)
    sys.exit()

## deque가 하나의 큐 처럼 작동
for i in range(M):
  queue.append(sequence_C[i])
  print(queue.popleft(), end = " ")

출처: https://codio.tistory.com/entry/%EB%B0%B1%EC%A4%80-24511%EB%B2%88-queuestack-Python%ED%8C%8C%EC%9D%B4%EC%8D%AC

좀만 더 깊이 고민했으면 생각해냈었을수도 있을 것 같다 ...!
나도 처음에 풀이 방법 고민하면서 스택이 필요가 없잖아 ..? 라고 생각했기 때문이다.
앞으로는 좀 더 진득하게 고민해봐야지

3. 느낀점

이제 방학이니 매일 진득하게 고민하며 풀어봐야지

profile
정말 알아?

0개의 댓글