๐ŸŒฑ → ๐ŸŒณ

[๋ฐฑ์ค€] 10866๋ฒˆ: ๋ฑ python ๋ณธ๋ฌธ

Algorithms

[๋ฐฑ์ค€] 10866๋ฒˆ: ๋ฑ python

BAY 2023. 1. 8. 17:27
728x90

https://www.acmicpc.net/problem/10866

 

10866๋ฒˆ: ๋ฑ

์ฒซ์งธ ์ค„์— ์ฃผ์–ด์ง€๋Š” ๋ช…๋ น์˜ ์ˆ˜ N (1 ≤ N ≤ 10,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์—๋Š” ๋ช…๋ น์ด ํ•˜๋‚˜์”ฉ ์ฃผ์–ด์ง„๋‹ค. ์ฃผ์–ด์ง€๋Š” ์ •์ˆ˜๋Š” 1๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 100,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค. ๋ฌธ์ œ์— ๋‚˜์™€์žˆ์ง€

www.acmicpc.net

 

๋ฌธ์ œ ์ •๋ณด

๋ฌธ์ œ ์œ ํ˜• ๋‚œ์ด๋„ ๊ฑธ๋ฆฐ ์‹œ๊ฐ„ ์Šค์Šค๋กœ ๊ตฌํ˜„ ์„ฑ๊ณต

๋ฑ ์‹ค๋ฒ„4 10m O

 

์„ค๊ณ„ ๋ฐฉ๋ฒ•

๋‚ด๊ฐ€ ๊ตฌํ˜„ํ•œ ๋ฐฉ๋ฒ•

๋ฑ ํด๋ž˜์Šค ์ƒ์„ฑ ํ›„ ๊ฐ ๋ฉ”์†Œ๋“œ ๊ตฌํ˜„

๋‹ค๋ฅธ ํ’€์ด 1

๊ฐ„๋‹จํ•˜๊ฒŒ deque ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•œ ํ’€์ด

๋‹ค๋ฅธ ํ’€์ด 2

dictionary๋ฅผ ์ด์šฉํ•˜์—ฌ switch-case๋ฌธ์„ ๊ตฌํ˜„

์ด๋ฅผ ์ด์šฉํ•˜์—ฌ key๊ฐ’์„ ๊ฐ€์ง€๊ณ  ๋”•์…”๋„ˆ๋ฆฌ์— ์ ‘๊ทผํ•˜์—ฌ ๋Œ€์‘๋˜๋Š” value๊ฐ’์„ ํ†ตํ•ด ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ

 

์ฝ”๋“œ

๋‚ด ํ’€์ด

import sys
input = sys.stdin.readline

class Deque:
  def __init__(self):
    self.data = []
  def size(self):
    return len(self.data)
  def empty(self):
    if len(self.data) == 0:
      return 1
    else:
      return 0
  def push_front(self, x):
    self.data.insert(0, x)
  def push_back(self, x):
    self.data.append(x)
  def pop_front(self):
    if len(self.data) == 0:
      return -1
    else:
      ans = self.data[0]
      self.data = self.data[1:]
      return ans
  def pop_back(self):
    if len(self.data) == 0:
      return -1
    else:
      ans = self.data[-1]
      self.data = self.data[:-1]
      return ans
  def front(self):
    if len(self.data) == 0:
      return -1
    else:
      return self.data[0]
  def back(self):
    if len(self.data) == 0:
      return -1
    else:
      return self.data[-1]

n = int(input())
deque = Deque()
for _ in range(n):
  cmd = input().split()
  op = cmd[0]
  if op == 'size':
    print(deque.size())
  elif op == 'empty':
    print(deque.empty())
  elif op == 'push_front':
    deque.push_front(cmd[1])
  elif op == 'push_back':
    deque.push_back(cmd[1])
  elif op == 'pop_front':
    print(deque.pop_front())
  elif op == 'pop_back':
    print(deque.pop_back())
  elif op == 'front':
    print(deque.front())
  elif op == 'back':
    print(deque.back())
  else:
    print('err')

 

๋‹ค๋ฅธ ํ’€์ด 1

from collections import deque
import sys

d = deque()
n = int(input())

for i in range(n):
    cmd = sys.stdin.readline().split()

    if cmd[0] == "push_front":
        d.appendleft(cmd[1])
    elif cmd[0] == "push_back":
        d.append(cmd[1])
    elif cmd[0] == "pop_front":
        if d:
            print(d[0])    
            d.popleft()
        else:
            print("-1")
    elif cmd[0] == "pop_back":
        if d:
            print(d[len(d) - 1])
            d.pop()
        else:
            print("-1")
    elif cmd[0] == "size":
        print(len(d))
    elif cmd[0] == "empty":
        if d:
            print("0")
        else:
            print("1")
    elif cmd[0] == "front":
        if d:
            print(d[0])
        else:
            print("-1")
    elif cmd[0] == "back":
        if d:
            print(d[len(d) - 1])
        else:
            print("-1")

 

๋‹ค๋ฅธ ํ’€์ด 2

def push_front(x, deq):
    tmp = [x]
    tmp.extend(deq)
    deq = tmp
    return deq

def push_back(x, deq):
    deq.append(x)
    return deq

def pop_front(deq):
    if deq : 
        print(deq.pop(0))
    else : #๋นˆ ๋ฆฌ์ŠคํŠธ == False
        print(-1)
    
def pop_back(deq):
    if deq :
        print(deq.pop())
    else :
        print(-1)

def size(deq):
    print(len(deq))

def empty(deq) :
    if not deq : 
        print(1)
    else : 
        print(0)
    
def front(deq) :
    if deq :
        print(deq[0])
    else :
        print(-1)
    
def back(deq) :
    if deq :
        print(deq[-1])
    else :
        print(-1)

statements_dict = {
    'push_front' : push_front,
    'push_back' : push_back,
    'pop_front' : pop_front,
    'pop_back' : pop_back,
    'size' : size,
    'empty' : empty, 
    'front' : front,
    'back' : back
}

N = int(input())

deq = []

for _ in range(N) :
    statement = input().split(" ")
    
    if len(statement) == 1 : 
        command = statement[0]
        statements_dict[command](deq)
    else :
        command, x = statement
        deq = statements_dict[command](x, deq)

์‹œ๊ฐ„ ๋ณต์žก๋„

$O(n)$

์–ด๋ ค์› ๊ฑฐ๋‚˜ ์ƒˆ๋กœ ์•Œ๊ฒŒ๋œ ์ 

deque ๋ชจ๋“ˆ์˜ ์กด์žฌ(appendleft, popleft ๋“ฑ๋“ฑ ..)

dictionary๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•

.. ์•„์ง python์— ๋Œ€ํ•ด์„œ๋„ ๋ฐฐ์›Œ๋‚˜๊ฐ€์•ผ ํ•  ๊ฒŒ ์ •๋ง ๋งŽ๊ตฌ๋‚˜ ๋Š๊ผˆ์Œ 

๋ฐฐ์šธ๊ฒŒ ๋„ˆ๋ฌด ๋งŽ์•„ !! ๐Ÿ˜ญ

์ฐธ๊ณ  ์ž๋ฃŒ

[Algorithm] [Python] BOJ/๋ฐฑ์ค€ - 10866_๋ฑ

728x90