문제 풀이/프로그래머스
[python] 프로그래머스 - 기능개발
동까의 코딩
2025. 3. 12. 15:35
반응형
파이썬 [프로그래머스] - 기능개발
문제 설명
프로그래머스의 기능개발 문제는 각 작업의 진행 상황(progresses)과 작업 속도(speeds)가 주어졌을 때,
작업이 100% 이상 완료되면 배포하는 방식으로, 배포마다 동시에 몇 개의 작업이 완료되는지를 구하는 문제입니다.
문제 조건
- 각 작업은 매일 일정한 속도로 진행됩니다.
- 작업은 순서대로 배포되며, 앞 작업이 완료되어야 뒷 작업도 함께 배포될 수 있습니다.
- 한 번의 배포에 여러 작업이 동시에 완료될 수 있습니다.
문제 접근 방식
- 시간 시뮬레이션
time
변수를 사용해 경과한 날짜를 추적합니다.
- 완료 조건 체크
- 각 작업의 진행도는
progress + time * speed
로 계산합니다. - 첫 번째 작업이 100% 이상이면 작업을 제거(pop)하고 배포할 작업의 수(
count
)를 증가시킵니다.
- 각 작업의 진행도는
- 배포 기록
- 첫 번째 작업이 아직 완료되지 않았다면, 지금까지 완료된 작업 수(
count
)를 결과 리스트에 추가하고
하루(time
)를 증가시킵니다.
- 첫 번째 작업이 아직 완료되지 않았다면, 지금까지 완료된 작업 수(
- 최종 처리
- 모든 작업이 완료된 후, 마지막 배포된 작업 수를 결과에 추가합니다.
문제 풀이
내가 푼 코드
def solution(progresses, speeds): answer = [] for i in range(len(progresses)): progresses[i] = 100 - progresses[i] if progresses[i] % speeds[i] != 0: progresses[i] = progresses[i] // speeds[i] + 1 else: progresses[i] = progresses[i] // speeds[i] cnt = 1 work_day = progresses[0] for i in range(1, len(progresses)): if progresses[i] <= work_day: cnt += 1 else: answer.append(cnt) work_day = progresses[i] cnt = 1 answer.append(cnt) return answer
GPT가 최적화 한 코드
def solution(progresses, speeds): answer = [] time = 0 count = 0 # 모든 작업이 완료될 때까지 반복 while len(progresses) > 0: # 첫 번째 작업이 완료되었는지 확인 if (progresses[0] + time * speeds[0]) >= 100: # 완료된 작업을 리스트에서 제거하고 배포할 작업 수 증가 progresses.pop(0) speeds.pop(0) count += 1 else: # 현재까지 완료된 작업이 있다면 배포 기록에 추가 if count > 0: answer.append(count) count = 0 # 하루를 증가시키며 작업 진행 상황 업데이트 time += 1 # 마지막에 남은 배포 작업 수 추가 answer.append(count) return answer
반응형