๐Ÿšถโ€โ™‚๏ธRoad to ์ฝ”ํ…Œ(6) - ๋ฑ

์•ˆํƒœํ˜„ยท2024๋…„ 12์›” 19์ผ

Algorithm

๋ชฉ๋ก ๋ณด๊ธฐ
6/15

๋ณธ ๊ฒŒ์‹œ๋ฌผ์€ BaaarkingDog๋‹˜์˜ ์‹ค์ „ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐ•์˜๋ฅผ ํ†ตํ•ด ๊ณต๋ถ€ํ•œ ๊ฒƒ์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

[์ถ”๊ฐ€] ์šฉ๊ฐํ•˜๊ฒŒ ์‹œ์ž‘ํ•˜๋Š” ์ฝ”๋”ฉํ…Œ์ŠคํŠธ

[์ถ”๊ฐ€] ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ํ•ฉ๊ฒฉ์ž ๋˜๊ธฐ - ํŒŒ์ด์ฌ

[์ถ”๊ฐ€] ์ขŒ์ถฉ์šฐ๋Œ, ํŒŒ์ด์ฌ์œผ๋กœ ์ž๋ฃŒ๊ตฌ์กฐ ๊ตฌํ˜„ํ•˜๊ธฐ

๋ฑ

์–‘์ชฝ ๋์—์„œ ์‚ฝ์ž…๊ณผ ์‚ญ์ œ๊ฐ€ ์ „๋ถ€ ๊ฐ€๋Šฅํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ. Double Ended Queue๋ผ๋Š” ๋œป์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

์„ฑ์งˆ

  • ์›์†Œ์˜ ์ถ”๊ฐ€๊ฐ€ O(1)
  • ์›์†Œ์˜ ์ œ๊ฑฐ๊ฐ€ O(1)
  • ์ œ์ผ ์•ž/๋’ค์˜ ์›์†Œ ํ™•์ธ์ด O(1)
  • ์ œ์ผ ์ƒ๋‹จ์ด ์•„๋‹Œ ๋‚˜๋จธ์ง€ ์›์†Œ๋“ค์˜ ํ™•์ธ ๋ฐ ๋ณ€๊ฒฝ์ด ์›์น™์  ๋ถˆ๊ฐ€๋Šฅ.
    head์™€ rear์„ queue์ฒ˜๋Ÿผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

์ง์ ‘ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์ง€๋งŒ, ํŒŒ์ด์ฌ์€ dequeue์„ collections ๋ชจ๋“ˆ์„ ํ†ตํ•ด ํด๋ž˜์Šค๋กœ ์ œ๊ณต.

from collections import deque

deque ๋ฉ”์„œ๋“œ

  • append(item): item์„ ๋ฑ์˜ ์˜ค๋ฅธ์ชฝ์— ์‚ฝ์ž…
  • appendleft(item): Item์„ ๋ฑ์˜ ์™ผ์ชฝ์— ์‚ฝ์ž…
  • pop(): ๋ฑ์˜ ์˜ค๋ฅธ์ชฝ ๋ ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋™์‹œ์— ๋ฑ์—์„œ ์ œ๊ฑฐ
  • popleft(): ๋ฑ์˜ ์™ผ์ชฝ ๋ ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋™์‹œ์— ๋ฑ์—์„œ ์ œ๊ฑฐ
  • extend(list): ๋ฐฐ์—ด(list)์„ ์ˆœํ™˜ํ•˜๋ฉด์„œ ๋ฑ์˜ ์˜ค๋ฅธ์ชฝ์— ์‚ฝ์ž…
  • extendleft(list): ๋ฐฐ์—ด(list)์„ ์ˆœํ™˜ํ•˜๋ฉด์„œ ๋ฑ์˜ ์™ผ์ชฝ์— ์ถ”๊ฐ€
  • remove(item): item์„ ๋ฑ์—์„œ ์ฐพ์•„ ์ œ๊ฑฐ
  • rotate(n): ๋ฑ์˜ n๋งŒํผ ํšŒ์ „(์–‘์ˆ˜์ผ ๊ฒฝ์šฐ ์˜ค๋ฅธ์ชฝ, ์Œ์ˆ˜์ผ ๊ฒฝ์šฐ ์™ผ์ชฝ)

๋ฐ”๋กœ ์—ฐ์Šต๋ฌธ์ œ ํ’€์–ด๋ณด์ž

์—ฐ์Šต๋ฌธ์ œ - ๋ฐฑ์ค€ 10866

from collections import deque
import sys


def push_front(d,item):
  d.appendleft(item)
    
def push_back(d,item):
  d.append(item)
    
def pop_front(d):
  if len(d) !=0:
    temp=d.popleft()
    print(temp)
  else:
    print(-1)
  
def pop_back(d):
  if len(d) !=0:
    temp=d.pop()
    print(temp)
  else:
    print(-1)

def back(d):
  if len(d) !=0:
    temp=d[-1]
    print(temp)
  else:
    print(-1)

def size(d):
  print(len(d))
    
def front(d):
  if len(d) !=0:
    temp=d[0]
    print(temp)
  else:
    print(-1)

def empty(d):
  if len(d) !=0:
    print(0)
  else:
    print(1)


d=deque()
N=int(sys.stdin.readline())

for _ in range(N):
  a=sys.stdin.readline().split()
  if a[0]=='push_front':
    push_front(d,int(a[1]))
  elif a[0]=='push_back':
    push_back(d,int(a[1]))
  elif a[0]=='pop_front':
    pop_front(d)
  elif a[0]=='pop_back':
    pop_back(d)
  elif a[0]=='back':
    back(d)
  elif a[0]=='size':
    size(d)
  elif a[0]=='empty':
    empty(d)
  elif a[0]=='front':
    front(d)

๋‹ค์–‘ํ•œ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ฃผ์š”ํ•˜๋‹ค.

profile
๊ณ ๊ฐ์—๊ฒŒ ์‹ ๋ขฐ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž ์•ˆํƒœํ˜„์ž…๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€