TIL 7 | Stack & Queue

saneeeeeeee_Yaยท2021๋…„ 3์›” 17์ผ
0

๐Ÿ›ธ

๋ชฉ๋ก ๋ณด๊ธฐ
8/25
post-thumbnail

Stack : LIFO(Last in First Out)
Queue : FIFO(First in First Out)
Deque : Double ended Queue

  1. Stack
    ๋ฐ์ดํ„ฐ ๋„ฃ๊ธฐ : push
    ๋ฐ์ดํ„ฐ ๊บผ๋‚ด๊ธฐ : pop
class Stack:
  def __init__(self): # ์Šคํƒ ๋งŒ๋“ค๊ธฐ
    self.stack = []
  
  def push(self, data): # ๋ฐ์ดํ„ฐ ๋„ฃ๊ธฐ
    self.stack.append(data)
  
  def pop(self): # ๋ฐ์ดํ„ฐ ๊บผ๋‚ด๊ธฐ
    if not self.stack:
      return False
    return self.stack.pop() # ๋งˆ์ง€๋ง‰์— ๋„ฃ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ธ๋‹ค

  def is_empty(self): # ์Šคํƒ์ด ๋น„์–ด์žˆ๋Š”์ง€ ํ™•์ธ 
    if not self.stack:  
      return True     # ๋น„์–ด์žˆ์œผ๋ฉด True
    else:
      return False    # ๋น„์–ด์žˆ์ง€ ์•Š์œผ๋ฉด False

  def is_contain(self, item): # ์Šคํƒ ์•ˆ์— ํ•ด๋‹น ์š”์†Œ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ
    return item in self.stack

  def clear(self): # ์Šคํƒ ์ดˆ๊ธฐํ™”
    self.stack.clear()
  
  def peek(self): # ์Šคํƒ์— ๋งˆ์ง€๋ง‰์— ๋„ฃ์€ ์š”์†Œ ํ™•์ธ 
    self.stack[-1]
  1. Queue
    ๋ฐ์ดํ„ฐ ๋„ฃ๊ธฐ : EnQueue
    ๋ฐ์ดํ„ฐ ๊บผ๋‚ด๊ธฐ : DeQueue
class Queue:
  def __init__(self): # ํ๋งŒ๋“ค๊ธฐ
    self.queue = []
  
  def enqueue(self, data): # ๋ฐ์ดํ„ฐ ๋„ฃ๊ธฐ
    self.queue.append(data)

  def dequeue(self): # ๋ฐ์ดํ„ฐ ๊บผ๋‚ด๊ธฐ
    if not self.queue:
      return False
    return self.queue.pop(0) # ๋งจ ์ฒ˜์Œ์— ๋„ฃ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ธ๋‹ค

  def is_empty(self): # ํ๊ฐ€ ๋น„์–ด์žˆ๋Š”์ง€ ํ™•์ธ
    if not self.queue: 
      return True     # ๋น„์–ด์žˆ๋Š”๋ฉด True
    else:
      return False    # ๋น„์–ด์žˆ์ง€ ์•Š์œผ๋ฉด False

  def is_contain(self, item): # ํ ์•ˆ์— ํ•ด๋‹น ์š”์†Œ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ
    return item in self.queue

  def clear(self): # ํ ์ดˆ๊ธฐํ™”
    self.queue.clear()
    
  def size(self):
  	return len(self.stack)

collections ๋ชจ๋“ˆ์„ ์ด์šฉํ•˜์—ฌ Stack๊ณผ Queue๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค

  1. Stack
from collections import deque

stack = deque([1,2,3,4,5])

stack.pop()
stack.append('a')
  1. Queue
from collections import deque

queue = deque([1,2,3,4,5])

# ๋ฐฉํ–ฅ์ด ์™ผ์ชฝ
queue.popleft()
queue.append('a')

# ๋ฐฉํ–ฅ์ด ์˜ค๋ฅธ์ชฝ
queue. pop()
queue.appendleft('a')
  1. dequeue
from collections import deque

dequeue = deque([1,2,3,4,5])

dequeue.popleft()
dequeue.appendleft('a')
dequeue.pop()
dequeue.append('b')

๐Ÿ’ฌ ๋ณต์Šต

Algorithm ๋ฌธ์ œ ํ’€์ด ๐Ÿคช

https://programmers.co.kr/learn/courses/30/lessons/42586

๋ฌธ์ œ ์„ค๋ช…

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ํŒ€์—์„œ๋Š” ๊ธฐ๋Šฅ ๊ฐœ์„  ์ž‘์—…์„ ์ˆ˜ํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค. ๊ฐ ๊ธฐ๋Šฅ์€ ์ง„๋„๊ฐ€ 100%์ผ ๋•Œ ์„œ๋น„์Šค์— ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜, ๊ฐ ๊ธฐ๋Šฅ์˜ ๊ฐœ๋ฐœ์†๋„๋Š” ๋ชจ๋‘ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋’ค์— ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ์•ž์— ์žˆ๋Š” ๊ธฐ๋Šฅ๋ณด๋‹ค ๋จผ์ € ๊ฐœ๋ฐœ๋  ์ˆ˜ ์žˆ๊ณ , ์ด๋•Œ ๋’ค์— ์žˆ๋Š” ๊ธฐ๋Šฅ์€ ์•ž์— ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ๋ฐฐํฌ๋  ๋•Œ ํ•จ๊ป˜ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.

๋จผ์ € ๋ฐฐํฌ๋˜์–ด์•ผ ํ•˜๋Š” ์ˆœ์„œ๋Œ€๋กœ ์ž‘์—…์˜ ์ง„๋„๊ฐ€ ์ ํžŒ ์ •์ˆ˜ ๋ฐฐ์—ด progresses์™€ ๊ฐ ์ž‘์—…์˜ ๊ฐœ๋ฐœ ์†๋„๊ฐ€ ์ ํžŒ ์ •์ˆ˜ ๋ฐฐ์—ด speeds๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ ๊ฐ ๋ฐฐํฌ๋งˆ๋‹ค ๋ช‡ ๊ฐœ์˜ ๊ธฐ๋Šฅ์ด ๋ฐฐํฌ๋˜๋Š”์ง€๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•˜์„ธ์š”.

์ œํ•œ ์‚ฌํ•ญ
์ž‘์—…์˜ ๊ฐœ์ˆ˜(progresses, speeds๋ฐฐ์—ด์˜ ๊ธธ์ด)๋Š” 100๊ฐœ ์ดํ•˜์ž…๋‹ˆ๋‹ค.
์ž‘์—… ์ง„๋„๋Š” 100 ๋ฏธ๋งŒ์˜ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
์ž‘์—… ์†๋„๋Š” 100 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
๋ฐฐํฌ๋Š” ํ•˜๋ฃจ์— ํ•œ ๋ฒˆ๋งŒ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ•˜๋ฃจ์˜ ๋์— ์ด๋ฃจ์–ด์ง„๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ง„๋„์œจ์ด 95%์ธ ์ž‘์—…์˜ ๊ฐœ๋ฐœ ์†๋„๊ฐ€ ํ•˜๋ฃจ์— 4%๋ผ๋ฉด ๋ฐฐํฌ๋Š” 2์ผ ๋’ค์— ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

progressesspeedsreturn
[93, 30, 55][1, 30, 5][2, 1]
[95, 90, 99, 99, 80, 99][1, 1, 1, 1, 1, 1][1, 3, 2]

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

์ž…์ถœ๋ ฅ ์˜ˆ #1
์ฒซ ๋ฒˆ์งธ ๊ธฐ๋Šฅ์€ 93% ์™„๋ฃŒ๋˜์–ด ์žˆ๊ณ  ํ•˜๋ฃจ์— 1%์”ฉ ์ž‘์—…์ด ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ 7์ผ๊ฐ„ ์ž‘์—… ํ›„ ๋ฐฐํฌ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
๋‘ ๋ฒˆ์งธ ๊ธฐ๋Šฅ์€ 30%๊ฐ€ ์™„๋ฃŒ๋˜์–ด ์žˆ๊ณ  ํ•˜๋ฃจ์— 30%์”ฉ ์ž‘์—…์ด ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ 3์ผ๊ฐ„ ์ž‘์—… ํ›„ ๋ฐฐํฌ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด์ „ ์ฒซ ๋ฒˆ์งธ ๊ธฐ๋Šฅ์ด ์•„์ง ์™„์„ฑ๋œ ์ƒํƒœ๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฒซ ๋ฒˆ์งธ ๊ธฐ๋Šฅ์ด ๋ฐฐํฌ๋˜๋Š” 7์ผ์งธ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.
์„ธ ๋ฒˆ์งธ ๊ธฐ๋Šฅ์€ 55%๊ฐ€ ์™„๋ฃŒ๋˜์–ด ์žˆ๊ณ  ํ•˜๋ฃจ์— 5%์”ฉ ์ž‘์—…์ด ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ 9์ผ๊ฐ„ ์ž‘์—… ํ›„ ๋ฐฐํฌ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ 7์ผ์งธ์— 2๊ฐœ์˜ ๊ธฐ๋Šฅ, 9์ผ์งธ์— 1๊ฐœ์˜ ๊ธฐ๋Šฅ์ด ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #2
๋ชจ๋“  ๊ธฐ๋Šฅ์ด ํ•˜๋ฃจ์— 1%์”ฉ ์ž‘์—…์ด ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ, ์ž‘์—…์ด ๋๋‚˜๊ธฐ๊นŒ์ง€ ๋‚จ์€ ์ผ์ˆ˜๋Š” ๊ฐ๊ฐ 5์ผ, 10์ผ, 1์ผ, 1์ผ, 20์ผ, 1์ผ์ž…๋‹ˆ๋‹ค. ์–ด๋–ค ๊ธฐ๋Šฅ์ด ๋จผ์ € ์™„์„ฑ๋˜์—ˆ๋”๋ผ๋„ ์•ž์— ์žˆ๋Š” ๋ชจ๋“  ๊ธฐ๋Šฅ์ด ์™„์„ฑ๋˜์ง€ ์•Š์œผ๋ฉด ๋ฐฐํฌ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ 5์ผ์งธ์— 1๊ฐœ์˜ ๊ธฐ๋Šฅ, 10์ผ์งธ์— 3๊ฐœ์˜ ๊ธฐ๋Šฅ, 20์ผ์งธ์— 2๊ฐœ์˜ ๊ธฐ๋Šฅ์ด ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ ํ’€์ด

import math

def solution(p, s): 
    answer = {}
    for i in range(len(p)):
        answer[i] = (math.ceil((100-p[i])/s[i])) #์†Œ์ˆ˜์  ์ด์ƒ์€ ์˜ฌ๋ฆผ
    count = []
    first = 0 #๋น„๊ตํ•  Index ์„ค์ •
    for i in range(len(answer)):
        if answer[first] < answer[i]:
            count.append(i-first)
            first = i
    count.append(len(p)-first) #๋งˆ์ง€๋ง‰ ๊ธฐ๋Šฅ ๋ฐฐํฌ    
    return count

๋‹ค๋ฅธ ์‚ฌ๋žŒ ํ’€์ด

def solution(progresses, speeds):
    Q=[]
    for p, s in zip(progresses, speeds): 
        if len(Q)==0 or Q[-1][0]<-((p-100)//s): #list Q๊ฐ€ ๋นˆ list ์ด๊ฑฐ๋‚˜ ์•ž์— ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ๋‹ค ๋๋‚ฌ๋‹ค๋ฉด
            Q.append([-((p-100)//s),1]) #[๊ฑธ๋ฆฐ ๊ธฐ๊ฐ„, 1]
        else:
            Q[-1][1]+=1 #์•ž์— ๊ธฐ๋Šฅ์ด ๋๋‚˜์ง€ ์•Š์•˜๋‹ค๋ฉด ํ•ด๋‹น ๊ธฐ๋Šฅ์˜ ์ˆ˜๋ฅผ ๋”ํ•ด์ค€๋‹ค
    return [q[1] for q in Q] 
profile
๐Ÿœhttps://action2thefuture.github.io/๐Ÿœ

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

Powered by GraphCDN, the GraphQL CDN