동까의 코딩

[python] 프로그래머스 - 기능개발 본문

문제 풀이/프로그래머스

[python] 프로그래머스 - 기능개발

동까의 코딩 2025. 3. 12. 15:35
반응형

파이썬 [프로그래머스] - 기능개발

문제 설명

프로그래머스의 기능개발 문제는 각 작업의 진행 상황(progresses)과 작업 속도(speeds)가 주어졌을 때,
작업이 100% 이상 완료되면 배포하는 방식으로, 배포마다 동시에 몇 개의 작업이 완료되는지를 구하는 문제입니다.

문제 조건

  • 각 작업은 매일 일정한 속도로 진행됩니다.
  • 작업은 순서대로 배포되며, 앞 작업이 완료되어야 뒷 작업도 함께 배포될 수 있습니다.
  • 한 번의 배포에 여러 작업이 동시에 완료될 수 있습니다.

문제 접근 방식

  1. 시간 시뮬레이션
    • time 변수를 사용해 경과한 날짜를 추적합니다.
  2. 완료 조건 체크
    • 각 작업의 진행도는 progress + time * speed로 계산합니다.
    • 첫 번째 작업이 100% 이상이면 작업을 제거(pop)하고 배포할 작업의 수(count)를 증가시킵니다.
  3. 배포 기록
    • 첫 번째 작업이 아직 완료되지 않았다면, 지금까지 완료된 작업 수(count)를 결과 리스트에 추가하고
      하루(time)를 증가시킵니다.
  4. 최종 처리
    • 모든 작업이 완료된 후, 마지막 배포된 작업 수를 결과에 추가합니다.

문제 풀이

  • 내가 푼 코드

    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
반응형