[programmers] 기능개발

wonyu·2022년 1월 27일
0

algorithm

목록 보기
20/25

문제 링크

https://programmers.co.kr/learn/courses/30/lessons/42586

풀이 방법

문제 분류가 스택/큐로 되어 있길래 while문으로 day를 +1씩 하면서 첫 값이 100 이상이 되면 100을 넘은 값들을 pop을 하는 식으로 풀려고 했었다. 그런데 새로운 리스트를 만들어서 기능을 완료하기까지 필요한 시간을 담아두면 굳이 while문이 필요 없을 것 같아서 방법을 변경했다.

일단 for문을 돌면서 기능을 완료하기까지의 시간을 담는데, 여기서 round()를 사용했어서 테스트 케이스 2개가 틀렸었다. 반올림이 아니라 올림을 해야 한다.
이후에는 이전 값(prev)을 기준으로 prev 이하인 값들을 카운트하고, prev보다 큰 값이 나오면 지금까지 카운트한 값을 answer 리스트에 추가한 뒤 prev와 cnt 값을 현재 값을 기준으로 변경한다.

for문을 다 돌고 나면 마지막 값은 if문에서 걸렸든 else문에서 걸렸든 answer에 추가되지 못하고 끝나므로, 마지막에 한 번 더 cnt 값을 추가해준다.

코드

import math

def solution(progresses, speeds):
    answer = []
    remains = []
    length = len(progresses)
    
    for i in range(length):
        tmp = math.ceil((100 - progresses[i]) / speeds[i])
        remains.append(tmp)
        
    prev = remains[0]
    cnt = 1
    print(remains)
    for i in range(1, length):
        if remains[i] <= prev:
            cnt += 1
        else:
            answer.append(cnt)
            prev = remains[i]
            cnt = 1
            
    answer.append(cnt)
    return answer

0개의 댓글