프로그래머스 스택큐 기능개발 풀이
https://programmers.co.kr/learn/courses/30/lessons/42586
문제는 해당 링크 들어가면 확인 가능
stack을 이용하면 pop(0) 을해도 되고, 그게 비효율적이라면 stack을 reverse해서 pop() * -1 default 쓰면 될것같다.
나는 큐를 이용해서 풀었다.
문제풀이
import math
from collections import deque
def solution(progresses, speeds):
answer = []
leftover = [] #남은 양
spentday = deque() #필요한 일수
cnt = 1
for i in progresses:
leftover.append(100 - i) #100에서 진행도를 빼줘서 남은걸 구해준다
for i in range(len(leftover)):
spentday.append(math.ceil(leftover[i] / speeds[i])) #올림해줌
while True:
for i in range(1, len(spentday)):
tmp = spentday[0] #첫번째를 기준으로
if tmp >= spentday[i]: #첫번째보다 필요한 일수가 적은것이 있나 확인
cnt += 1 #첫번째가 완료된다면 같이 완료될 개수 cnt++
elif tmp < spentday[i]: #만약 첫번째보다 크다면
break #for문 종료
answer.append(cnt)
for j in range(cnt): #완료된 개수만큼 pop해주기
spentday.popleft()
cnt = 1 #개수 초기화
if len(spentday) == 0: #0이 될때까지 반복
break
return answer
풀긴 풀었는데 너무 지저분한것같다. ㅠㅠ
혹시나 테케 1,2,3,4 가 틀리신다면
[99, 99, 99] ,[1, 1,1]
이 테케 추가해서 해보세요!
다른 사람의 풀이
def solution(progresses, speeds):
Q=[]
for p, s in zip(progresses, speeds):
if len(Q)==0 or Q[-1][0]<-((p-100)//s):
Q.append([-((p-100)//s),1])
else:
Q[-1][1]+=1
return [q[1] for q in Q]
zip을 이용하여 해결했다.
100-p를 안쓰고 -(p-100) 을 쓴건 math.ceil 없이 올림을 쓰려고 한거 같다. (p-100) => 음수, (p-100) // s => 내림한 음수(음수에서 내림은 절대값은 커짐), -((p-100)//s) => 올림한 양수
저번도 그렇고 zip을 잘 이용할 줄 알아야겠슴!!!