[프로그래머스 Lv2] 기능개발(python)

이진규·2022년 3월 7일
1

프로그래머스(PYTHON)

목록 보기
38/64

문제

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

나의 코드 (답안참조)

"""
1. 아이디어

2. 시간복잡도

"""

def solution(progresses, speeds):

    answer = []
    time = 0
    cnt = 0
    
    while progresses:
        
        if progresses[0] + (time * speeds[0]) >= 100:
            progresses.pop(0)
            speeds.pop(0)
            cnt += 1 # 진도가 100%를 넘어서 서비스에 반영한 횟수
        else: # 만약 진도를 100% 넘지 못하는 경우 
            if cnt > 0: # 지금까지 서비스에 반영한 횟수를 더해준다.
                answer.append(cnt)
                cnt = 0
                
            time += 1 # 시간의 흐름
    
    """ 마지막에 else:부분을 실행하지 않고 반복문을 나오기 때문에 
    추가적으로 서비스에 반영한 횟수를 더해준다. """
    answer.append(cnt) 
    
    return answer
    

설명

스택/큐 문제인데 어렵게 느껴졌다..

다시 풀이한 코드


def solution(progresses, speeds):
    
    answer = []
    
    while progresses:
        
        cnt = 0 # 서비스에 반영된 횟수
        
        for i in range(len(progresses)):
            progresses[i] += speeds[i] # 한 타임마다 진도를 더해준다.
        
        while progresses and progresses[0] >= 100: # 만약 첫번째 진도가 100이 넘으면 그 이후 진도도 더이상 100이상이 없을때 까지 뽑아준다.
            progresses.pop(0)
            speeds.pop(0)
            cnt += 1
        
        if cnt != 0:
            answer.append(cnt)
            
    return answer
    

오히려 처음 풀때보다 더 가독성 있는듯?

참고자료

X

profile
항상 궁금해하고 공부하고 기록하자.

0개의 댓글