프로그래머스 - 기능 개발

ironcat·2022년 3월 12일
0

알고리즘

목록 보기
11/17

알고리즘 문제풀이

문제 링크

# testcase 11 오류
# 원인 찾음 나눗셈 // -> / 로 변경
# import math
# def solution(progresses, speeds):
#     answer = []
#     cnt = 1
#     last = math.ceil((100 - progresses[0]) / speeds[0])
#     for idx in range(1, len(progresses)):
#         tmp = math.ceil((100 - progresses[idx]) / speeds[idx])
#         if last >= tmp:
#             cnt += 1
#         else:
#             answer.append(cnt)
#             last = tmp
#             cnt = 1
#     answer.append(cnt)
#     return answer

import math
def solution(progresses, speeds):
    answer = []
    front = 0
    for i in range(1, len(progresses)):
        current = math.ceil((100 - progresses[i]) / speeds[i])
        before  = math.ceil((100 - progresses[front]) / speeds[front])
        if current > before:
            answer.append(i - front)
            front = i
        
    answer.append(len(progresses) - front)
    return answer
    

참고 하면 좋을 것 같음

#
# ceil을 사용하지 않음
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]
#
# stack pop 방식 사용
def solution(progresses, speeds):
    answer = []
    count = 0
    time = 0
    while len(progresses) > 0:
        if (progresses[0] + time * speeds[0]) >= 100:
            progresses.pop(0)
            speeds.pop(0)
            count += 1
        else:
            if count > 0:
                answer.append(count)
                count = 0
            time += 1
    answer.append(count)
    return answer
profile
공부하는 블로그

0개의 댓글