https://school.programmers.co.kr/learn/courses/30/lessons/42586
프로그래머스 기능 개발 문제 해결하기
프로그래머스 팀에서는 여러 기능 개선 작업을 진행 중입니다. 각 기능은 100% 완료되어야만 서비스에 반영할 수 있으며, 개발 속도의 차이로 인해 뒤의 기능이 앞의 기능보다 먼저 개발될 수 있습니다. 이러한 상황에서, 각 배포마다 몇 개의 기능이 완성되는지 계산하는 것이 중요합니다. 오늘은 이 문제를 해결하는 방법에 대해 알아보겠습니다.
문제 설명
- `progresses`: 각 기능의 현재 진행 상태를 나타내는 배열
- `speeds`: 각 기능의 개발 속도를 나타내는 배열
이 두 배열을 바탕으로, 각 배포 때 몇 개의 기능이 완성되는지 반환하는 함수를 작성해야 합니다.
제한 사항
- 최대 100개의 작업을 관리할 수 있습니다.
- 각 작업의 진도는 100 미만의 자연수입니다.
- 각 작업의 개발 속도는 100 이하의 자연수입니다.
- 하루의 끝에 배포가 이루어집니다.
해결 방법 및 코드 설명
아래는 제가 작성한 `solution` 함수의 코드입니다.
def solution(progresses, speeds):
answer = []
while progresses:
t = 0
# 각 기능의 진행 상태를 하루치만큼 업데이트
for i in range(len(progresses)):
progresses[i] += speeds[i]
# 100% 완료된 기능의 수 계산
for i in range(len(progresses)):
if progresses[i] >= 100:
t += 1
else:
break
# 완료된 기능 제거 및 결과에 추가
for _ in range(t):
progresses.pop(0)
speeds.pop(0)
if t > 0:
answer.append(t)
return answer
이 코드는 다음 단계로 구성됩니다:
1. 업데이트 단계: 각 기능의 진행 상태를 하루치만큼 업데이트합니다.
2. 검사 및 계산 단계: 각 기능을 순차적으로 검사하여, 100% 완료된 기능의 수를 세어 `t`에 저장합니다.
3. 제거 및 기록 단계**: 완료된 기능을 `progresses` 및 `speeds` 배열에서 제거하고, `t`가 0보다 클 경우 `answer` 배열에 `t`를 추가합니다.
이 로직을 통해 각 배포마다 몇 개의 기능이 완성되는지 정확하게 파악할 수 있습니다.
예시
`progresses = [93, 30, 55]`와 `speeds = [1, 30, 5]`인 경우, 이 함수는 `[2, 1]`을 반환합니다. 이는 첫 번째 배포에서 두 개의 기능이 완료되고, 두 번째 배포에서 한 개의 기능이 완료된다는 것을 의미합니다.