[Python][프로그래머스 Lv.2] 기능개발

1jinju·2023년 10월 17일
0

프로그래머스

목록 보기
11/14

기능개발

import math
def solution(progresses, speeds):
    answer = []
    day = [] # 날짜 스택
    for i in range(len(progresses)):
        m = math.ceil((100 - progresses[i]) / speeds[i]) # 진도율 100%까지 걸리는 일 수
        if len(day) == 0: # 스택이 비어 있으면
            day += [m]
        elif m > max(day): # 현재 인덱스의 날짜가 스택의 최댓값보다 크면(앞의 기능이 완성되어 스택이 비게 됨)
            answer.append(len(day))
            day = [m]
        else:
            day += [m]
    if len(day) != 0:
        answer.append(len(day))
    return answer

다른 사람의 풀이

def solution(progresses, speeds):
    Q=[]
    for p, s in zip(progresses, speeds):
    	# Q가 비어 있거나
        # Q의 마지막 원소의 완료 예상 날짜보다 현재 완료 예상 날짜가 크면 Q에 새로운 완료 예상 날짜 추가
        if len(Q)==0 or Q[-1][0]<-((p-100)//s): 
            Q.append([-((p-100)//s),1])
        else:
            Q[-1][1]+=1 # 마지막 원소의 완료 예상 날짜에 +1
    # Q에는 각 날짜에 몇 개의 작업이 완료되는지가 기록되어 있음
    # Q의 각 원소의 두 번째 값(같은 날짜에 배포되는 기능의 수)를 추출하여 리스트로 반환
    return [q[1] for q in Q]

올림을 하기 위해 나는 math 라이브러리의 ceil 함수를 사용하였다.
math.ceil 없이 올림을 쓰는 방법이 있다는 것을 알게 되었다.

(p-100) => 음수
(p-100) // s => 내림한 음수
-((p-100)//s) => 올림한 양수

profile
아자잣

0개의 댓글