[프로그래머스 python] 스택큐 - 기능 개발

이혜지·2022년 1월 26일
0

Algorithm

목록 보기
2/12
post-thumbnail

프로그래머스 스택큐 기능개발 풀이
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을 잘 이용할 줄 알아야겠슴!!!

profile
공유 문화를 지향하는 개발자입니다.

0개의 댓글