1 분 소요

문제 링크

내 풀이

import math

def solution(progresses, speeds):
    count = 1
    recent = 0
    answer = []
    for progress, speed in zip(progresses, speeds):
        date = math.ceil((100 - progress) / speed)
        if recent == 0:
            recent = date
            continue
        if recent >= date:
            count += 1
        else:
            answer.append(count)
            recent = date
            count = 1
    answer.append(count)
    return answer

다른 풀이

def solution(progresses, speeds):
    
    result = []  # 각 배포마다 완료된 작업 수를 저장할 리스트
    
    # 아직 작업 중인 경우 반복
    # speeds가 빈 배열이 아닐 땐 True 반환, 빈 배열일 땐 False 반환
    while speeds:
        
        # 각 작업의 1일씩 진도 업데이트
        for idx, speed in enumerate(speeds):
            progresses[idx] += speed

        count = 0  # 배포할 작업 수를 세는 변수

        # 맨 앞 작업 진도가 100% 이상되면, progresses와 speeds 리스트에서 해당 작업 제거하고 작업 수 증가
        # progresses가 빈 배열이 아닐 땐 True 반환, 빈 배열일 땐 False 반환
        while progresses and progresses[0] >= 100:
            del progresses[0], speeds[0]
            count += 1
        
        # 배포될 작업 수를 결과 리스트에 추가
        if count > 0:
            result.append(count)

    return result
출처: https://1ets-just-do-it.tistory.com/80 [파이썬은 신이야🔥🔥🔥:티스토리]

풀이 해석

  • for문을 통해 각 작업의 1일진도를 업데이트 하였고 progresses[0]이 100을 넘었을 경우 삭제하면서 count를 증가시키는데 이를 while문 조건이 성립하는 하에선 계속 반복한다 while 문이 끝났을 때 count를 append 해준다

배울 점

  • while 문과 작업이 끝난 progress와 speed를 del 해주며 지워나가는 사고
  • while 문 조건은 100이 넘는게 있으면 없어질때까지 돌아가게 하는 사고

댓글남기기