알고리즘 스터디

[프로그래머스] 스택/큐 3. 기능개발

문제

 


풀이

케이스 1번에서 배포 가능한 일은 7, 3, 9 이다.

먼저 이렇게 시간을 계산해 놓고 앞의 숫자들보다 큰 수가 나올 때까지 count하다가 큰 수가 나오면 count를 answer에 저장하면 될 것 같았다.

스택과 큐를 사용한 풀이는 아니었지만 한번 해봤다.

그리고 풀면서 굳이 시간을 먼저 계산하고 배열에 넣을 필요 없이 계산하면서 count해도 문제가 없을 것 같아 그렇게 수정했다.

import math

def solution(progresses, speeds):
    answer = []
    
    maxValue = math.ceil((100 - progresses[0]) / speeds[0])
    count = 1

    for i in range(1, len(progresses)):
        if maxValue < math.ceil((100 - progresses[i]) / speeds[i]):
            maxValue = math.ceil((100 - progresses[i]) / speeds[i])
            answer.append(count)
            count = 1
        else:
            count += 1
    answer.append(count)
        
    return answer

바로 통과했다. 다른 레벨 2에 비해 쉬운 문제였다


다른 분의 코드

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]

멋있당

배울 점

1. 길이가 같은 배열을 zip을 사용해 간결하게 표현했다.

2. math.ceil()함수 없이 -(p-100)//s로 올림처리했다. 👍

3. count 변수 없이 Q에 바로 저장해 깔끔해 보인다.