티스토리 뷰

문제출처 - https://programmers.co.kr/learn/courses/30/lessons/42586

 

코딩테스트 연습 - 기능개발 | 프로그래머스

프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다. 먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇

programmers.co.kr

def solution(progresses, speeds):
    answer = []  # 각 배포마다 몇개의 기능이 배포되는지(날자는 상관X)
    finish = [0] * len(progresses)  # 완료된지 몇일이나 지났는지
    
    # 뒤에 있는 기능은 앞 기능이 배포될때 함께 배포 #
    
    while max(finish) != -1:
        
        # 작업 속도 올려주기
        for i in range(len(progresses)):
            progresses[i] += speeds[i]
            if progresses[i] >= 100 and finish[i] != -1:
                finish[i] += 1
                
        # 작업 완료된거 answer에 추가하기
        cnt = 0
        for i in range(len(finish)):
            # 완료된 작업이면 건너뛰기
            if finish[i] == -1:
                continue
                
            if finish[i] == 0:
                break
            else:
                cnt += 1
                finish[i] = -1
        
        if cnt > 0:
            answer.append(cnt)
                    
    
    return answer

설명

 

우선, finish라는 작업의 개수와 동일한 크기의 리스트를 만들어 '작업이 완료되고 몇일이 지났는지'를 저장한다. (사실 안의 값은 0, -1이 아니면 별 의미 없음)

만약 finish값이 0이라면 -> 아직 완료되지 않은거

                    -1이면 -> 배포 끝난거

                    1 이상이면 -> 작업은 끝났는데 아직 배포되지 않은거

 

while문 안

1. 하루치 개발 속도만큼 진도율에 추가. 추가했는데 100% 이상이면 finish를 1씩 증가.

 

2. for문 돌면서 완료된 작업이면 건너뛰고

   아직 완료되지 않은 작업이 나오면 for문 탈출

   완료된 작업이면 cnt 1씩 증가시키고 finish를 -1로 바꿔주기 (cnt는 하루에 배포할 작업의 개수)

 

3. cnt가 0보다 크면 answer에 추가

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함