프로그래머스 level2 기능 개발

Kim Yongbin·2023년 9월 6일
0

코딩테스트

목록 보기
42/162

Problem

https://school.programmers.co.kr/learn/courses/30/lessons/42586?language=python3

Solution

내 풀이

import math

def solution(progresses, speeds):
    answer = []

    curr_day = 0
    count = 0
    for idx, progress in enumerate(progresses):
        remain = math.ceil((100 - progress) / speeds[idx])
        if curr_day >= remain:
            count += 1
        else:
            if count != 0:
                answer.append(count)
            curr_day = remain
            count = 1
        
    if count > 0:
        answer.append(count)
    return answer

현재 일감의 걸리는 시간이 현재의 일 수보다 낮으면 같이 배포하고 크다면 다음 배포의 시작점으로 지정하면서 배포 일감의 개수를 구하였다.

다른 사람 풀이

def solution(progresses, speeds):
    Q = []
    for progress, speed in zip(progresses, speeds):
        if len(Q)==0 or Q[-1][0] < -((progress-100)//speed):
            Q.append([-((progress-100)//speed), 1])
        else:
            Q[-1][1] += 1
        
    return [q[1] for q in Q]

Q를 2차 배열로 만들어 [걸리는 시간, 배포할 일감 개수]를 기록하여 푼 풀이

-((progress-100)//speed) 이 수식이 매우 인상적이었다.

만약 progress=30, speed=30일 때 (100-progress) / speed = 2.33 이다. 나는 math.ceil을 통해 올림 처리를 하였는데, 해당 풀이에서는 음수에서의 내림은 양수에서의 올림과 같다는 것을 이용하였다.

즉, -2.3 내림 = -3 ⇒ 2.3의 올림 = 3 이다.

Reference

https://school.programmers.co.kr/learn/courses/30/lessons/42586 - 다른 사람 풀이

profile
반박 시 여러분의 말이 맞습니다.

0개의 댓글