BOJ/๐Ÿฅˆ

โ˜…Stack & Queue & Deque Intermediate I - 20 Solvedโ˜…

metamong 2022. 12. 11.

โ˜… 10828 ์Šคํƒ โ˜…

 

import sys

N = int(sys.stdin.readline())
stack = []*N
kinds = ['push', 'pop', 'size', 'empty', 'top']

for _ in range(N):
    order = sys.stdin.readline().split()
    kind = order[0]

    if kind == kinds[0]:
        stack.append(order[1])
    
    elif kind == kinds[1]:
        if len(stack) > 0:
            print(stack[-1])
            stack.pop()
        else:
            print(-1)
    
    elif kind == kinds[2]:
        print(len(stack))
    
    elif kind == kinds[3]:
        print(0) if len(stack) > 0 else print(1)

    else:
        print(stack[-1]) if len(stack) > 0 else print(-1)

 

๐Ÿฅฆ stack์„ list์˜ ํ˜•ํƒœ๋กœ ์ •์˜ํ–ˆ๊ณ ,์‚ฝ์ž…์€ append, ์‚ญ์ œ๋Š” pop method๋ฅผ ์‚ฌ์šฉํ•˜์˜€๋‹ค. ์—ฌ๊ธฐ์„œ ์ฃผ์–ด์ง„ N์˜ ๊ธธ์ด์— ๋งž๋Š” stack์„ ๋ฏธ๋ฆฌ ํ• ๋‹นํ•ด ํ• ๋‹น ๋ฉ”๋ชจ๋ฆฌ์™€ ์†Œ์š” ์‹œ๊ฐ„์„ ์ตœ์†Œํ™”


โ˜… 28278 ์Šคํƒ 2 โ˜…

 

import sys
input=sys.stdin.readline
N=int(input())
stack=[]
for _ in range(N):
    orders=list(map(int,input().strip().split()))
    if orders[0] == 1:
        stack.append(orders[1])
    elif orders[0] == 2:
        if stack: 
            print(stack.pop())
        else:
            print(-1)
    elif orders[0] == 3:
        print(len(stack))
    elif orders[0] == 4:
        if not stack: print(1)
        else: print(0)
    else:
        if stack: print(stack[-1])
        else: print(-1)

โ˜… 9012 ๊ด„ํ˜ธ โ˜…

 

def if_VPS(PS):
    stack = []

    for p in PS:

        if stack:
            if stack[-1] == '(' and p == ')':
                stack.pop() 
            else:
                stack.append(p)
        else:
            stack.append(p)
    
    if not stack:
        return 'YES'
    else:
        return 'NO'


for _ in range(int(input())):
    PS = input()

    print(if_VPS(PS))

 

๐Ÿงœ‍โ™€๏ธ PS์—์„œ ํ•œ ๊ฐœ์”ฉ stack์— ๋„ฃ๋˜, ๊ธฐ์กด์— stack์—์„œ '('๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด, PS์—์„œ ๋นผ๋‚ธ ๋ฌธ์ž๊ฐ€ ')'์ผ ๊ฒฝ์šฐ, ์„œ๋กœ ๋งค์นญ๋˜์–ด ์—†์•ฐ. ์ด๋ ‡๊ฒŒ ๋งค์นญ๋˜๋Š” ๊ด„ํ˜ธ์Œ๋“ค์„ ๊ณ„์† ์—†์• ๋ฉฐ PS ๋ชจ๋“  iteration์ด ๋๋‚œ ๋’ค, stack์— ์ˆ˜๊ฐ€ ๋‚จ์•„์žˆ๋‹ค๋ฉด VPS๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ NO, ์—†๋‹ค๋ฉด YES


โ˜… 5957 Cleaning the Dishes โ˜…

 

import sys
input=sys.stdin.readline
N=int(input())
unwashed=[N-i for i in range(N)]
washed_but_not_dried=[]
washed_and_dried=[]
while 1:
    if len(washed_and_dried)==N: break
    C_i,D_i=map(int,input().split())
    if C_i==1:
        for _ in range(D_i):
            washed_but_not_dried.append(unwashed.pop())
    else:
        for _ in range(D_i):
            washed_and_dried.append(washed_but_not_dried.pop())
print(*washed_and_dried[::-1],sep='\n')

 

๐Ÿงœ‍โ™€๏ธ ์ด 3๊ฐœ์˜ stack์„ ์‚ฌ์šฉ → unwashed, washed_but_not_dried, washed_and_dried. C_i๊ฐ€ 1์ด๋ฉด D_i ๊ฐœ์ˆ˜๋งŒํผ unwashed์—์„œ washed_but_not_dried stack์œผ๋กœ ์˜ฎ๊ธฐ๊ณ , C_i๊ฐ€ 2์ด๋ฉด D_i ๊ฐœ์ˆ˜๋งŒํผ washed_but_not_dried์—์„œ washed_and_dried๋กœ ์˜ฎ๊ธฐ๊ธฐ. stack ์ž๋ฃŒ๊ตฌ์กฐ์˜ ๋ฌผ๋ฆฌ์  ์œ„์น˜์ธ ๋งจ ์œ„๋Š” list์˜ ๋งจ ๋’ค ์›์†Œ, stack์˜ ๋ฌผ๋ฆฌ์  ๊ตฌ์กฐ์ƒ ๋งจ ์•„๋ž˜ element๋Š” list์˜ ๋งจ ์•ž ์›์†Œ๋ฅผ ๋œปํ•œ๋‹ค. stack์˜ ๋ฌผ๋ฆฌ์  ์œ„์น˜ ์ƒ ๋งจ ์œ„๋ถ€ํ„ฐ ์ถœ๋ ฅํ•˜๋ ค๋ฉด list์˜ ๋’ค ์›์†Œ๋ถ€ํ„ฐ reversed order๋กœ ์ถœ๋ ฅ. stack์˜ ์œ„/์•„๋ž˜์™€ list์˜ ๋งจ ์•ž/๋’ค ๊ตฌ๋ถ„๋งŒ ํ—ท๊ฐˆ๋ฆฌ์ง€ x


โ˜… 4949 ๊ท ํ˜•์žกํžŒ ์„ธ์ƒ โ˜…

 

def is_balanced(string):
    stack = []

    for str in string:
        if str in ['(', ')', '[', ']']:
            if stack:
                if (stack[-1] == '(' and str == ')') or (stack[-1] == '[' and str == ']'):
                    stack.pop()
                else:
                    stack.append(str)
            else:
                stack.append(str)
    
    if not stack:
        return 'yes'
    else:
        return 'no'

while 1:
    string = input()

    if string == '.':
        break

    print(is_balanced(string))

 

๐Ÿงœ‍โ™€๏ธ ์œ„ 9012๋ฒˆ ๋ฌธ์ œ์™€ ๋™์ผ


โ˜… 10773 ์ œ๋กœ โ˜…

 

import sys
input = sys.stdin.readline

st = []
for _ in range(int(input())):
    n = int(input())

    st.pop() if n == 0 else st.append(n)
      
print(sum(st))

 

๐Ÿงœ‍โ™€๏ธ 0์„ ๋ถ€๋ฅผ ๋•Œ๋งˆ๋‹ค ๊ฐ€์žฅ ์ตœ๊ทผ์˜ ์ˆ˜๋ฅผ ์ง€์šฐ๋Š” ๋ฐฉ์‹ - stack ํ™œ์šฉ → FIFO(First In First Out)


โ˜… 24813 The Grand Adventure โ˜…

 

for _ in range(int(input())):
    adventure_string=input()
    backpack=[]
    flag=0
    for s in adventure_string:
        if s in ['$','|','*']:backpack.append(s)
        elif s in ['b','t','j']:
            if len(backpack)==0:
                print('NO')
                flag+=1
                break
            popped=backpack.pop()
            if (s=='b'and popped!='$') or (s=='t'and popped!='|') or (s=='j'and popped!='*'):
                print('NO')
                flag+=1
                break
    if flag==0:print('YES'if len(backpack)==0 else'NO')

 

๐Ÿงœ‍โ™€๏ธ ๋ฌธ์ œ์—์„œ bag๊ฐ€ ์ผ์ข…์˜ stack ์ž๋ฃŒ๊ตฌ์กฐ ์—ญํ• ์„ ํ•œ๋‹ค. ์ตœ๊ทผ์— ์ง‘์–ด๋„ฃ์€ ๊ฒƒ๋งŒ ๊บผ๋‚ผ ์ˆ˜ ์žˆ๋‹ค ํ–ˆ์œผ๋ฏ€๋กœ stack ์‚ฌ์šฉ. b๋ผ๋ฉด ๊บผ๋‚ธ ๊ฒŒ $๊ฐ€ ์•„๋‹ˆ๊ฑฐ๋‚˜, t๋ผ๋ฉด |, j๋ผ๋ฉด *๊ฐ€ ์•„๋‹ ๊ฒฝ์šฐ, ๋˜๋Š” ๊บผ๋‚ผ ๊ฒŒ ์—†๋Š” ๊ฒฝ์šฐ - ์ด ๋‘ ๊ฐ€์ง€ if๋ฌธ์œผ๋กœ yes/no ํŒ์ •


โ˜… 3986 ์ข‹์€ ๋‹จ์–ด โ˜…

 

import sys
input=sys.stdin.readline

def is_good_word(word):
    stack=[]
    for i in word:
        if len(stack)!=0 and stack[-1]==i:stack.pop()
        else:stack.append(i)
    if len(stack)==0:return True
    else: return False


n=0
for _ in range(int(input())):
    if is_good_word(input().rstrip()):n+=1
print(n)

 

๐Ÿงœ‍โ™€๏ธ ์„ ์„ ๊ต์ฐจํ•˜์ง€ ์•Š์œผ๋ฉด์„œ ๋™์ผํ•œ ๊ธ€์ž๋ผ๋ฆฌ ์„ ์ด ์—ฐ๊ฒฐ๋œ๋‹ค๋Š” ๊ฑด, stack์„ ๋งŒ๋“ค์–ด์„œ pop()๊ณผ append() ์—ฐ์‚ฐ์„ ๋ชจ๋‘ ์ง„ํ–‰ํ–ˆ์„ ๋•Œ ์ตœ์ข…์ ์œผ๋กœ stack์— ๋‚จ๋Š” ์•ŒํŒŒ๋ฒณ์ด ์—†๋Š” ๊ฒฝ์šฐ์ด๋‹ค. ์ง ์ง“๋Š” ์œ ํ˜•์€ stack์„ ๋งŒ๋“ค์–ด์„œ ์ตœ์ข…์ ์œผ๋กœ stack์— ๋‚ด์šฉ์ด ๋‚จ์•„์žˆ๋Š”์ง€ ์•„๋‹Œ์ง€ ํ™•์ธํ•  ๋•Œ ์ฃผ๋กœ ํŒ๋‹จ


โ˜… 10845 ํ โ˜…

 

from collections import deque
import sys
N = int(sys.stdin.readline())
queue = deque(maxlen=N)
kinds = ['push', 'pop', 'size', 'empty', 'front', 'back']

for _ in range(N):
    order = sys.stdin.readline().split()
    kind = order[0]

    if kind == kinds[0]: #push X
        queue.append(order[1])
    
    elif kind == kinds[1]: #pop
        print(queue.popleft()) if queue else print(-1)
    
    elif kind == kinds[2]: #size
        print(len(queue))
    
    elif kind == kinds[3]: #empty
        print(1) if len(queue) == 0 else print(0)

    elif kind == kinds[4]: #front
        print(queue[0]) if queue else print(-1)

    else: #back
        print(queue[-1]) if queue else print(-1)

 

๐Ÿฅฆ deque()์˜ ์ธ์ž๋กœ maxlen์„ ๋ฏธ๋ฆฌ ์„ค์ •ํ•ด ๋ฉ”๋ชจ๋ฆฌ ์šฉ๋Ÿ‰ ์ดˆ๊ณผ ๋ฐฉ์ง€. ์„ฑ๋Šฅ ์†๋„ ๋นจ๋ฆฌ ๊ฐœ์„ . append()์™€ popleft() ์‚ฌ์šฉ. popleft() ์ถœ๋ ฅ๋ฌผ์ด ๋นผ๋‚ธ ์›์†Œ ์ž์ฒด๊ฐ’์„ ๋ฆฌํ„ด. queue ์ž์ฒด๊ฐ€ ์กฐ๊ฑด์ด ๋˜์–ด ์›์†Œ๊ฐ€ queue ์•ˆ์— ํ•œ ๊ฐœ ์ด์ƒ์ด๋ผ๋„ ์กด์žฌํ•œ๋‹ค๋ฉด True, ์›์†Œ๊ฐ€ ์—†์œผ๋ฉด False


โ˜… 18258 ํ 2 โ˜…

 

import sys
input=sys.stdin.readline
from collections import deque
queue=deque()
N=int(input())

for _ in range(N):
    orders=input().strip().split(' ')
    if orders[0] == 'push': queue.append(orders[1])
    elif orders[0] == 'pop':
        if queue: print(queue.popleft())
        else: print(-1)
    elif orders[0] == 'size':
        print(len(queue))
    elif orders[0] == 'empty':
        if queue: print(0)
        else: print(1)
    elif orders[0] == 'front':
        if queue: print(queue[0])
        else: print(-1)
    else:
        if queue: print(queue[-1])
        else: print(-1)

 

๐Ÿฅฆ queue์˜ ๋งจ ์™ผ์ชฝ์€ queue[0]์œผ๋กœ, queue์˜ ๋งจ ์˜ค๋ฅธ์ชฝ ์›์†Œ๋Š” queue[-1]๋กœ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๋งจ ์™ผ์ชฝ์€ ์ œ์ผ ์ฒ˜์Œ์— ๋„ฃ์€ ์›์†Œ / ๋งจ ์˜ค๋ฅธ์ชฝ์€ ์ œ์ผ ์ตœ๊ทผ, ๋งˆ์ง€๋ง‰์— ๋„ฃ์€ ์›์†Œ. ์–‘ ๋์˜ ์›์†Œ ํ™•์ธ์€ O(1)


โ˜… 11866 ์š”์„ธํ‘ธ์Šค ๋ฌธ์ œ 0 โ˜…

+++

โ˜… 1158 ์š”์„ธํ‘ธ์Šค ๋ฌธ์ œ โ˜…

 

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

N,K = map(int,input().split())
q = deque([i for i in range(1,N+1)])
l = []

while len(q) != 0:
    for _ in range(K-1):
        q.append(q.popleft())
    l.append(q.popleft())

print('<'+str(l)[1:-1]+'>')

 

๐Ÿฅฆ ์› ์ˆœ์—ด์˜ ๊ฒฝ์šฐ ์ฃผ๋กœ queue. N์ด 7, K๊ฐ€ 3์ด๋ผ๋ฉด ์ผ๋‹จ ๋ชจ๋“  ์ˆ˜๋ฅผ queue์— ์ง‘์–ด๋„ฃ์€ ๋’ค, 1๋ฒˆ์งธ์™€ 2๋ฒˆ์งธ๋Š” ๋‹ค์‹œ queue์— ๋„ฃ๊ณ (์ฆ‰ ์›์ด๋ฏ€๋กœ ๋นผ๋‚ด์„œ ์ˆœ์„œ์ƒ ๋ผ์ŠคํŠธ ๊ผฌ๋ฆฌ์— ๋„ฃ์–ด์•ผ ํ•˜๊ธฐ์— queue ์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ ์ ๋‹น), 3๋ฒˆ์งธ๋Š” ๋นผ์„œ ์ •๋‹ต list์— ๋„ฃ๋Š”๋‹ค, queue์— ์กด์žฌํ•˜์ง€ ์•Š์„ ๋•Œ๊นŒ์ง€ ์ด๋ฅผ ๋ฐ˜๋ณต


โ˜… 2164 ์นด๋“œ2 โ˜…

 

import sys
from collections import deque

N = int(sys.stdin.readline())
lst = [i for i in range(1,N+1)]
queue = deque(lst)

while len(queue) != 1:
    queue.popleft()
    queue.append(queue.popleft())

print(queue[0])

 

๐Ÿฅฆ queue๋ฅผ list ์ž๋ฃŒ๊ตฌ์กฐ์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์„ฑ๋Šฅ ์ธก๋ฉด์—์„œ ๋งŽ์ด ๋ถ€์กฑํ•˜๋ฏ€๋กœ deque()์„ ๋งŽ์ด ํ™œ์šฉ. list์˜ pop(0)๊ณผ insert(0,x)๋Š” O(N) ํ•˜์ง€๋งŒ deque์˜ popleft(), appendleft(x) ๋ชจ๋‘ O(1)์ด๊ธฐ์— ๋„ฃ๊ณ  ๋นผ๋Š” ์‹œ๊ฐ„์ด list์— ๋น„ํ•ด ๋งค์šฐ ๋‹จ์ถ•. ํ•˜์ง€๋งŒ, deque์˜ ๋ฌด์ž‘์œ„ ์ ‘๊ทผ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(N)์ด๋ฏ€๋กœ ํ•ด๋‹น data๋ฅผ ๊ฐ€๊ธฐ๊นŒ์ง€ ๊ณ„์† iteration์ด ์ง„ํ–‰. ๋จผ์ € ๋“ค์–ด์˜จ ๊ฒŒ ๋จผ์ € ๋‚˜๊ฐ€๋Š”, ์ฆ‰, ์œ„์—์„œ ๋นผ์„œ ์•„๋ž˜๋กœ ๋„ฃ๋Š” ๋ฌธ์ œ๋Š” queue ํ™œ์šฉ. 1๊ฐœ ์›์†Œ๋งŒ ๋‚จ์„ ๋•Œ๊นŒ์ง€ popleft()์™€ append() ๋ฐ˜๋ณต ์‚ฌ์šฉ


โ˜… 1966 ํ”„๋ฆฐํ„ฐ ํ โ˜…

 

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

for _ in range(int(input())):
    N,M=map(int,input().split())
    order = 0

    #queue ์ƒ์„ฑ
    queue=deque(maxlen=N) #N๊ฐœ๊ฐ€ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š” queue
    importances=list(map(int,input().split())) #์ค‘์š”๋„

    for i in range(N):queue.append(importances[i]) #queue์— ์ค‘์š”๋„ ์ง‘์–ด ๋„ฃ์Œ

    while queue:
        others = list(itertools.islice(queue, 1, len(queue)))

        if len(others) == 0: #๋‚˜ ํ•˜๋‚˜๋งŒ ์žˆ๋‹ค๋ฉด ๋ฐ”๋กœ ์ถœ๋ ฅ
            order += 1 #์ธ์‡„ํ•˜๋ฏ€๋กœ ์ธ์‡„ ์ˆœ์„œ 1์ฆ๊ฐ€
            print(order)
            break
        
        else:
            if queue[0] >= max(others): #queue์˜ ๊ฐ€์žฅ ์•ž์— ์žˆ๋Š” ๋ฌธ์„œ ์ธ์‡„
                M-=1 #์›ํ•˜๋Š” ๋ฌธ์„œ ์ •๋ ฌ ์ˆœ์„œ -1
                order+=1 #์ธ์‡„ํ•˜๋ฏ€๋กœ ์ธ์‡„ ์ˆœ์„œ 1 ์ฆ๊ฐ€
                queue.popleft() #์ธ์‡„ํ•˜๋ฏ€๋กœ ๋งจ ์•ž์˜ ๋ฌธ์„œ ๋นผ๋‚ด๊ธฐ
                if M == -1: #์ธ์‡„ํ•˜๋Š” ๋ฌธ์„œ๊ฐ€ ์›ํ•˜๋Š” ๋ฌธ์„œ๋ผ๋ฉด
                    print(order)
                    break
                
            else: #์ค‘์š”๋„๊ฐ€ ๋” ๋†’์€ ๋ฌธ์„œ๊ฐ€ ๋’ค์— ์กด์žฌ
                queue.append(queue.popleft()) #๋งจ ์•ž์˜ ๋ฌธ์„œ๋ฅผ ๋นผ๋‚ด์„œ ๋’ค์— ๋ถ™์ด๊ธฐ
                M-=1 #์›ํ•˜๋Š” ๋ฌธ์„œ ์ •๋ ฌ ์ˆœ์„œ -1
                if M == -1: #์›ํ•˜๋Š” ๋ฌธ์„œ๊ฐ€ ๋งจ ๋’ค๋กœ ๊ฐ€๊ฒŒ ๋œ๋‹ค๋ฉด ํ•ด๋‹น ๋ฌธ์„œ์˜ ์ •๋ ฌ ์ˆœ์„œ len(queue)-1๋กœ ์„ค์ •
                    M = len(queue) -1

 

๐Ÿฅฆ ์ธ์‡„๋ฅผ ์•ž์—์„œ๋ถ€ํ„ฐ, ์ฆ‰ ๋จผ์ € ๋“ค์–ด์˜จ ๋ฌธ์„œ๋ถ€ํ„ฐ ํ•˜๋ ค๊ณ  ํ•˜๋˜, ๋Œ€๊ธฐ ์ค‘์ธ ๋ฌธ์„œ๋“ค์˜ ์ค‘์š”๋„๋ณด๋‹ค ๋ชจ๋‘ ๋†’์•„์•ผ ํ•˜๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋’ค๋กœ ๋ณด๋‚ด๋Š” ๋ฌธ์ œ. ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๋ฌธ์„œ์˜ ํ˜„์žฌ queue ์ •๋ ฌ ์ˆœ์„œ๋ฅผ ์•ˆ ์ƒํƒœ์—์„œ(M)

 

โ‘  queue์— ๋ฌธ์„œ 1๊ฐœ๋งŒ ์žˆ๋‹ค๋ฉด ๋ฐ”๋กœ ์ถœ๋ ฅ - order+1 ํ•œ ๋‹ค์Œ order๊ฐ’ ์ถœ๋ ฅ - 

 

queue์— ๋ฌธ์„œ 2๊ฐœ ์ด์ƒ ์žˆ๋‹ค๋ฉด

โ‘ก ๋งŒ์•ฝ ์ค‘์š”๋„๊ฐ€ ๋” ๋†’์€ ๋ฌธ์„œ๊ฐ€ ๋’ค์— ์—†๋‹ค๋ฉด, ๋ฐ”๋กœ ์ถœ๋ ฅ - ์—ญ์‹œ order+1ํ•˜๊ณ , ๋ชจ๋“  ๋ฌธ์„œ๊ฐ€ ์™ผ์ชฝ์œผ๋กœ ์›€์ง์ด๋ฏ€๋กœ M ์ˆœ์„œ - 1. ์ด ๋•Œ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๋ฌธ์„œ๋ผ๋ฉด(M๊ฐ’์ด -1์ด๋ฉด) ๋ฐ”๋กœ order๊ฐ’ ์ถœ๋ ฅ

 

โ‘ข ์ค‘์š”๋„๊ฐ€ ๋” ๋†’์€ ๋ฌธ์„œ๊ฐ€ ๋’ค์— ์กด์žฌํ•œ๋‹ค๋ฉด ์•ž์˜ ๋ฌธ์„œ ๋นผ์„œ ๋’ค์— ๋ถ™์ด๋Š”, queue์˜ append() & popleft() ์‚ฌ์šฉ. ์ด ๋•Œ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๋ฌธ์„œ๊ฐ€ ๋’ค๋กœ ๊ฐ€๊ฒŒ ๋œ๋‹ค๋ฉด M๊ฐ’์„ len(queue)-1๋กœ ๋”ฐ๋กœ ๋งž์ถฐ์คŒ

 

๐Ÿฅฆ itertools์˜ islice()๋ฅผ ์ด์šฉํ•ด ํ˜„์žฌ ๋‚˜๋ฅผ ์ œ์™ธ, queue์— ๋Œ€๊ธฐํ•˜๋Š” ๋’ค์˜ ๋ชจ๋“  ๋ฌธ์„œ๋“ค๋งŒ ๋นผ์˜ฌ ์ˆ˜ ์žˆ์Œ (์ธ์ž: ๋Œ€๊ธฐ์—ด,start,stop,step). ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๋ฌธ์„œ๋ฅผ queue์˜ ์ •๋ ฌ ์ˆœ์„œ M์ด -1์ด ๋˜๋Š” ์ง€ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ํŒ๋‹จํ•ด ์œ„ ์„ธ๊ฐ€์ง€ ์ƒํ™ฉ์— ๋งž๊ฒŒ code ์งœ์ฃผ๋ฉด ๋!


โ˜… 10866 ๋ฑ โ˜…

 

from collections import deque
import sys

dq = deque()
input = sys.stdin.readline

for _ in range(int(input())):
    orders = input()
    
    order = orders.split()[0]

    if order == 'push_front':
        dq.appendleft(orders.split()[1])

    elif order == 'push_back':
        dq.append(orders.split()[1])
    
    elif order == 'pop_front':
        if dq:
            print(dq.popleft())
        else:
            print(-1)
    
    elif order == 'pop_back':
        if dq:
            print(dq.pop())
        else:
            print(-1)
    
    elif order == 'size':
        print(len(dq))
    
    elif order == 'empty':
        if dq:
            print(0)
        else:
            print(1)
    
    elif order == 'front':
        if dq:
            print(dq[0])
        else:
            print(-1)
    
    elif order == 'back':
        if dq:
            print(dq[-1])
        else:
            print(-1)

 

๐Ÿณ ์ผ๋ ฌ๋กœ ๋˜์–ด ์žˆ๋Š” deque์—์„œ ์™ผ์ชฝ ์‚ฝ์ž… appendleft(), ์˜ค๋ฅธ์ชฝ์—์„œ ์‚ฝ์ž… append(), ์™ผ์ชฝ์—์„œ ๋นผ๋‚ด๊ธฐ popleft(), ์˜ค๋ฅธ์ชฝ์—์„œ ๋นผ๋‚ด๊ธฐ pop()


โ˜… 28279 ๋ฑ 2 โ˜…

 

import sys
input=sys.stdin.readline
from collections import deque
dq=deque()
for _ in range(int(input())):
    order=input().rstrip().split()
    if order[0] == '1':
        dq.appendleft(order[1])
    elif order[0] == '2':
        dq.append(order[1])
    elif order[0] == '3':
        if dq:
            print(dq.popleft())
        else:
            print(-1)
    elif order[0] == '4':
        if dq:
            print(dq.pop())
        else:
            print(-1)
    elif order[0] == '5':
        print(len(dq))
    elif order[0] == '6':
        if dq: print(0)
        else: print(1)
    elif order[0] == '7':
        if dq:
            print(dq[0])
        else:
            print(-1)
    elif order[0] == '8':
        if dq:
            print(dq[-1])
        else:
            print(-1)

 

๐Ÿณ deque์€ ์ œ์ผ ์•ž/๋’ค ์›์†Œ ํ™•์ธ O(1) 


 

โ˜… 20301 ๋ฐ˜์ „ ์š”์„ธํ‘ธ์Šค โ˜…

 

from collections import deque
N,K,M=map(int,input().split())
dq = deque(i for i in range(1,N+1))
reverse=0
while 1:
    if len(dq)==0: break
    if reverse==0: #์š”์„ธํ‘ธ์Šค
        cnt=0
        while dq:
            for _ in range(K-1):
                dq.append(dq.popleft())
            print(dq.popleft())
            cnt+=1

            if cnt==M:
                reverse+=1
                break

    if reverse==1: #๋ฐ˜์ „ ์š”์„ธํ‘ธ์Šค
        cnt=0
        while dq:
            for _ in range(K-1):
                dq.appendleft(dq.pop())
            print(dq.pop())
            cnt+=1

            if cnt==M:
                reverse-=1
                break

 

๐Ÿณ ์š”์„ธํ‘ธ์Šค ์ˆœ์—ด์€ circular ์›์—์„œ queue ๋ฐฉ์‹์œผ๋กœ ์™ผ์ชฝ์—์„œ popleft()๋ฅผ ์ง„ํ–‰ํ•˜๊ณ , target์ด ์•„๋‹ˆ๋ฉด ์˜ค๋ฅธ์ชฝ์œผ๋กœ append()ํ•˜๋Š” ๋ฐฉ์‹. ๊ทธ๋Ÿฌ๋‚˜ ๋ฐ˜์ „ ์š”์„ธํ‘ธ์Šค ์ˆœ์—ด์€ ๊ทธ ๋ฐ˜๋Œ€๋กœ ํšŒ์ „ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฅธ์ชฝ์—์„œ pop()์„ ์ง„ํ–‰ํ•˜๊ณ , target์ด ์•„๋‹ˆ๋ฉด ์™ผ์ชฝ์œผ๋กœ appendleft() / counting ๋ณ€์ˆ˜๋กœ M์— ๋„๋‹ฌํ•˜๋ฉด ์š”์„ธํ‘ธ์Šค ์ˆœ์—ด๋Œ€๋กœ ์ง„ํ–‰ํ•  ์ง€, ๋ฐ˜์ „ ์š”์„ธํ‘ธ์Šค ์ˆœ์—ด๋Œ€๋กœ ์ง„ํ–‰ํ• ์ง€ ํŒ๋‹จ. ์ƒํ™ฉ์— ๋”ฐ๋ผ ์–‘์ชฝ์—์„œ append, pop์„ ์ž์œ ์ž์žฌ๋กœ ์ง„ํ–‰ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ž๋ฃŒ๊ตฌ์กฐ deque์ด ์ ๋‹น


โ˜… 17952 ๊ณผ์ œ๋Š” ๋๋‚˜์ง€ ์•Š์•„! โ˜…

 

import sys
input=sys.stdin.readline

N=int(input())
t,stack=0,[]
for _ in range(N):
    info=list(map(int,input().split()))
    if info[0]==1:
        if info[2]==1: t+=info[1]
        else:
            stack.append([info[1],info[2]-1])
    else:
        if stack:
            stack[-1][1] -= 1
            if stack[-1][1] == 0:
                t+=(stack.pop()[0])
print(t)

 

๐Ÿณ ์ตœ๊ทผ ๊ณผ์ œ๋ถ€ํ„ฐ ๋จผ์ € ํ•ด๊ฒฐํ•˜๋ฏ€๋กœ ์Šคํƒ ์ž๋ฃŒ๊ตฌ์กฐ ํ™œ์šฉ. 1์ด๋ฉด ์ƒˆ๋กญ๊ฒŒ ๋‚˜์˜จ ๊ณผ์ œ ์ฒ˜๋ฆฌ / 0์ด๋ฉด stack์— ์ตœ๊ทผ์— ๋“ค์–ด๊ฐ„ ๊ณผ์ œ 1๋ถ„ ์ฒ˜๋ฆฌ


โ˜… 17891 Pairing Socks โ˜…

 

import sys
input=sys.stdin.readline
n=int(input())
org=list(map(int, input().split()))
aux,cnt=[],0

for x in org:
    cnt+=1
    if aux:
        if x != aux[-1]:
            aux.append(x)
        else:
            aux.pop()
    else:
        aux.append(x)
if aux:
    print('impossible')
else:
    print(cnt)

 

๐Ÿณ

→ ์Œ“์—ฌ์žˆ๋Š” org for loop ๋Œ๊ธฐ

์˜ค๋ฅธ์ชฝ aux stack์— ์•„๋ฌด๊ฒƒ๋„ ์—†๋‹ค๋ฉด aux ์Œ“๊ธฐ / ์žˆ๋‹ค๋ฉด aux ๋งจ ์œ„ ์›์†Œ์™€ org์˜ ๋งจ ์œ„ ์›์†Œ ๋น„๊ต: ๊ฐ™๋‹ค๋ฉด pop(), ๋‹ค๋ฅด๋‹ค๋ฉด ์˜ค๋ฅธ์ชฝ aux ์Œ“๊ธฐ

 

โ€ป ์œ„ 2๋ฒˆ move๋Š” ํ•„์š” x. pair๋ฅผ ๊ตฌํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ์–‘ stack์˜ ๊ผญ๋Œ€๊ธฐ sock๊ณผ์˜ ๋น„๊ต์ด๋ฏ€๋กœ ๊ตณ์ด 2๋ฒˆ move ์—†์ด 1๋ฒˆ move๋งŒ์œผ๋กœ ์ถฉ๋ถ„. ๋”ฐ๋ผ์„œ org for loop ๋Œ๋ฆฌ๋ฉด ๋˜๊ณ  possibleํ•œ case๋ผ๋ฉด len(org)๊ฐ€ ์ •๋‹ต. ์–‘ ์ชฝ์ด ๋šซ๋ ค์žˆ์ง€ ์•Š์€, ํ•œ ์ชฝ๋งŒ ๋šซ๋ฆฐ stack์˜ ๊ตฌ์กฐ ์ƒ ๋น„๊ต๊ฐ€ ์ œํ•œ์ ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ์—ˆ๋˜ ๋ฌธ์ œ


โ˜… 4540 Q โ˜…

 

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

for _ in range(int(input())):
    m,n=map(int,input().split())
    l=list(input().split())
    dq=deque(l)
    ans=['?']*m
    for _ in range(n):
        x,y=map(int,input().split())
        dq.remove(l[x-1])
        ans[y-1]=l[x-1]
    for i in range(m):
        if ans[i] == '?':
            ans[i] = dq.popleft()
    print(*ans)

 

๐Ÿณ ๋จผ์ € ์ง€์ • ์œ„์น˜์— ์ผ๋ถ€ ์›์†Œ๋ฅผ ๋„ฃ๊ณ  ๋‚˜๋จธ์ง€๋Š” queue ๋Œ๋ฆฌ๋ฉฐ popleft()ํ•œ ๊ฒฐ๊ณผ ์ฐจ๊ณก์ฐจ๊ณก ๋„ฃ๊ธฐ


๋Œ“๊ธ€