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

2026. 4. 9. 13:15·Algorithm

문제

 

 

풀이 #1

import math

def solution(progresses, speeds):
    stack = []  #기술 배포 대기 스택
    res = []
    for i in range(len(progresses)) :
        # days : 기능 개발까지 걸리는 일수
        # 나눗셈의 결과가 ex. 7.3일 이렇게 나오면 8일이 걸리므로 math.ceil 사용
        days = math.ceil((100 - progresses[i]) / speeds[i])
        #배포 대기중인 max일수가 현재 비교하고 있는 기능의 개발 days보다 작으면
        if stack and max(stack) < days : 
        	#기능 개수 res에 추가 후 stack clear -> 현재 비교중인 days stack에 추가
            res.append(len(stack))
            stack.clear()
            stack.append(days)
            
            print(stack)
        else :
            stack.append(days)
      
    #모두 비교 후 배포 대기중인 기술들 배포
    if stack :
        res.append(len(stack))
        
    return res

 

 

이렇게 처음엔 디자인했고, 정답 자체는 맞았다. 하지만 계속 max(stack)을 호출하기 때문에 최악의 경우 시간복잡도가 O(n^2)가 나올 수 있다고 판단했고, 시간 복잡도를 줄일 방법을 고민해본 후에 새로운 풀이도 작성했다.

 

 

풀이 #2

 

import math

def solution(progresses, speeds):
    res = []
    count = 0
    max_day = 0  # 현재 배포 그룹의 최대 소요일

    for i in range(len(progresses)):
        days = math.ceil((100 - progresses[i]) / speeds[i])

        if count > 0 and max_day < days:
            # 새로운 배포 그룹 시작
            res.append(count)
            count = 0
            max_day = 0

        max_day = max(max_day, days)
        count += 1

    if count > 0:
        res.append(count)

    return res

len(stack)을 사용하는 것 대신에, max_day라는 변수를 선언하여 병목현상을 제거했다. 그리고 stack 리스트 사용 대신에, max_day로 최댓값만 저장하고 초기화하면 되므로 공간복잡도도 낮출 수 있었다.

 

풀이 로직

 

1.  각 기능의 완료까지 걸리는 일수(days)를 math.ceil(천장함수 : 소숫점이 존재하면 위의 수로 처리)로 하여 계산한다.

2. days가 현재 그룹의 최대 배포일(max_days)보다 크면, res에 추가 후 새로운 그룹 시작(max_day = 0)

3. days가 max_day 이하이면, 같은 그룹에 묶음(count += 1)

4. 반복 끝난 후, 남은 그룹의 count 추가

 

 

Github Link    ←

 

BackJoon-Programmers/프로그래머스/2/42586. 기능개발 at main · jaeheonki/BackJoon-Programmers

Contribute to jaeheonki/BackJoon-Programmers development by creating an account on GitHub.

github.com

 

 

'Algorithm' 카테고리의 다른 글

[프로그래머스] 피로도  (0) 2026.04.09
[프로그래머스] 주식가격  (0) 2026.04.09
[프로그래머스] 귤 고르기  (1) 2026.04.01
[프로그래머스] 짝지어 제거하기  (4) 2026.04.01
[프로그래머스] 최댓값과 최솟값  (2) 2026.03.30
'Algorithm' 카테고리의 다른 글
  • [프로그래머스] 피로도
  • [프로그래머스] 주식가격
  • [프로그래머스] 귤 고르기
  • [프로그래머스] 짝지어 제거하기
uj07096
uj07096
개발블로그 시작 !
  • uj07096
    김재헌 님의 블로그
    uj07096
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • Algorithm
      • My IT
        • Article
        • Codes
      • TIL
      • My Projects N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    GAN
    머신러닝
    DenseNet
    Tensor
    EfficientNet
    코딩테스트
    Stack
    DeepLearning
    PyTorch
    EDA
    프로그래머스
    LSTM
    Faster R-CNN
    transfer learning
    convolution
    autoencoder
    python
    파이썬
    ResNet
    이상치
    딥러닝
    kaggle
    AI
    LeetCode
    til
    YOLO
    코테
    Algorithm
    optuna
    데이터전처리
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
uj07096
[프로그래머스] 기능개발
상단으로

티스토리툴바