[Programmers] 기능개발

퍼롱's·2021년 9월 17일
0

🍒Programmers🍒

목록 보기
10/11
post-thumbnail

출처: 프로그래머스 코딩테스트 연습
https://programmers.co.kr/learn/courses/30/lessons/42586

풀이(python3)

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

    for i in range(len(progresses)):
        # 작업 기간을 day라고 정의
        # 100%에서 완료된 작업률만큼 빼주고 하루에 가능한 작업률로 나눠서 day를 구함

        # 나누어 떨어지면 day는 몫을 그대로 정의
        if (100-progresses[i]) % speeds[i] == 0:
            day = (100-progresses[i])//speeds[i]
        
        # 나누어 떨어지지 않으면 day는 (몫+1)로 정의
        else:
            day = (100-progresses[i])//speeds[i]+1
        
        # release보다 day가 크면 새로운 날에 기능이 배포되는 것이므로 answer에 새로운 1 추가
        # release는 day로 새롭게 정의
        if release < day :
            answer.append(1)
            release = day
            
        # release보다 day가 작거나 같으면 release에 같이 기능이 배포되는 것이므로 answer[-1]에 1 추가
        else:
            answer[-1] += 1
    
    return answer

예전엔 아래 풀이⬇로 풀어서 for문을 2번이나 돌리고 days를 for문을 돌 때마다 슬라이싱을 했었는데 for문을 한 번만 사용하게 바꾸어보았다

day를 구해서 최댓값(release)을 계속 갱신시켜주면서 진행하는 코드이다

훨씬 효율적으로 돌아가는 것을 확인할 수 있었다

여전히 이게 스택과 큐를 이용한 것인지는......🤔

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

    for i in range(len(progresses)):
        if (100-progresses[i]) % speeds[i] == 0:
            days.append(int((100-progresses[i])/speeds[i]))
        else:
            days.append(int((100-progresses[i])/speeds[i])+1)

    for j in range(len(days)-1):
        if days[j+1] <= max(days[:j+1]):
            answer[-1] += 1
        else:
            answer.append(1)
    return answer
profile
유지경성

0개의 댓글