Stack : LIFO(Last in First Out)
Queue : FIFO(First in First Out)
Deque : Double ended Queue
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]
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๋ฅผ ๋ง๋ค ์ ์๋ค
from collections import deque
stack = deque([1,2,3,4,5])
stack.pop()
stack.append('a')
from collections import deque
queue = deque([1,2,3,4,5])
# ๋ฐฉํฅ์ด ์ผ์ชฝ
queue.popleft()
queue.append('a')
# ๋ฐฉํฅ์ด ์ค๋ฅธ์ชฝ
queue. pop()
queue.appendleft('a')
from collections import deque
dequeue = deque([1,2,3,4,5])
dequeue.popleft()
dequeue.appendleft('a')
dequeue.pop()
dequeue.append('b')
๐ฌ ๋ณต์ต
Algorithm ๋ฌธ์ ํ์ด ๐คช
๋ฌธ์ ์ค๋ช
ํ๋ก๊ทธ๋๋จธ์ค ํ์์๋ ๊ธฐ๋ฅ ๊ฐ์ ์์ ์ ์ํ ์ค์ ๋๋ค. ๊ฐ ๊ธฐ๋ฅ์ ์ง๋๊ฐ 100%์ผ ๋ ์๋น์ค์ ๋ฐ์ํ ์ ์์ต๋๋ค.
๋, ๊ฐ ๊ธฐ๋ฅ์ ๊ฐ๋ฐ์๋๋ ๋ชจ๋ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๋ค์ ์๋ ๊ธฐ๋ฅ์ด ์์ ์๋ ๊ธฐ๋ฅ๋ณด๋ค ๋จผ์ ๊ฐ๋ฐ๋ ์ ์๊ณ , ์ด๋ ๋ค์ ์๋ ๊ธฐ๋ฅ์ ์์ ์๋ ๊ธฐ๋ฅ์ด ๋ฐฐํฌ๋ ๋ ํจ๊ป ๋ฐฐํฌ๋ฉ๋๋ค.
๋จผ์ ๋ฐฐํฌ๋์ด์ผ ํ๋ ์์๋๋ก ์์ ์ ์ง๋๊ฐ ์ ํ ์ ์ ๋ฐฐ์ด progresses์ ๊ฐ ์์ ์ ๊ฐ๋ฐ ์๋๊ฐ ์ ํ ์ ์ ๋ฐฐ์ด speeds๊ฐ ์ฃผ์ด์ง ๋ ๊ฐ ๋ฐฐํฌ๋ง๋ค ๋ช ๊ฐ์ ๊ธฐ๋ฅ์ด ๋ฐฐํฌ๋๋์ง๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํ์ธ์.
์ ํ ์ฌํญ
์์
์ ๊ฐ์(progresses, speeds๋ฐฐ์ด์ ๊ธธ์ด)๋ 100๊ฐ ์ดํ์
๋๋ค.
์์
์ง๋๋ 100 ๋ฏธ๋ง์ ์์ฐ์์
๋๋ค.
์์
์๋๋ 100 ์ดํ์ ์์ฐ์์
๋๋ค.
๋ฐฐํฌ๋ ํ๋ฃจ์ ํ ๋ฒ๋ง ํ ์ ์์ผ๋ฉฐ, ํ๋ฃจ์ ๋์ ์ด๋ฃจ์ด์ง๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ง๋์จ์ด 95%์ธ ์์
์ ๊ฐ๋ฐ ์๋๊ฐ ํ๋ฃจ์ 4%๋ผ๋ฉด ๋ฐฐํฌ๋ 2์ผ ๋ค์ ์ด๋ฃจ์ด์ง๋๋ค.
์ ์ถ๋ ฅ ์
progresses | speeds | return |
---|---|---|
[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]