[PG42586] 기능개발
✏️ 𝗔𝗹𝗴𝗼𝗿𝗶𝘁𝗵𝗺/프로그래머스

[PG42586] 기능개발

프로그래머스

https://programmers.co.kr/learn/courses/30/lessons/42586

 

코딩테스트 연습 - 기능개발

프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는

programmers.co.kr

🚩 문제 설명

프로그래머스 #42586

◾ 배포되는 일수를 리턴하는 문제

◾ 작업은 순서가 있고, 만약 전에 있는 작업이 끝나지 않으면 배포하지 못한다.

 

 

 

 


 

 

 

✅ 입출력

progresses : 먼저 배포 되어야하는 우선순위가 적힌 배열
speeds : 각 작업의 개발 속도
return ➡️ 배포되는 일수마다 몇 개의 작업이 배포되는가
progresses speeds return
[93, 30, 55] [1, 30, 5] [2, 1]
[95, 90, 99, 99, 80, 99] [1, 1, 1, 1, 1, 1] [1, 3, 2]

✔️ 예시

◾ 93% 완료된 첫번째 작업은 7%가 남았고 speeds가 1%씩이므로 ➡️ 7일 걸린다.

◾ 30% 완료된 두번째 작업은 70%가 남았고 speeds가 30%씩이므로 ➡️ 3일 걸린다.

  • 하지만 첫번째 작업이 아직 끝나지 않았으므로, 7일날 같이 배포된다.

◾ 55% 완료된 두번째 작업은 45%가 남았고 speeds가 5%씩이므로 ➡️ 9일 걸린다.

◾ 따라서 첫번째, 두번째 작업은 7일날 같이 2개 배포되고, 세번째 작업은 9일날 하나 배포된다.

 

 

 


 

 

 

📑 문제 풀이

with 파이썬 (Python)
import math


def solution(progresses, speeds):
    ans = []
    days = []

    for p, s in zip(progresses, speeds):
        left = 100 - p  # 남은 퍼센트 구하기
        days.append(math.ceil(left / s))  # 배포 지연 일수

    pivot = 0
    for i in range(len(days)):
        cnt = 0
        for j in range(pivot, len(days)):
            if days[i] < days[j]:
                break
            pivot += 1
            cnt += 1
        if cnt != 0:
            ans.append(cnt)

    return ans

💬 Point

➡️  math.ceil() : 소수점을 무조건 올림처리한다. 정수면 그대로 둔다.
➡️  pivot을 만들어 이미 센 작업은 넘어간다.

◾ 우선 반복문을 돌아서 각 작업의 배포 지연 일수를 구한다.

  • 만약 progresses = [93, 30, 55] 라면,
  • 각 배포 지연 일수는 [7, 3, 9]가 된다.

◾ 두번째 반복문을 돌면서 다음 작업의 배포 지연 일수가 자신보다 작다면 카운트 한다.

  7 3 9 cnt
7 3
3 none
9 1

◾ 위와 같이 세기 위하여 pivot를 사용한다.

◾ pivot 부터 시작하여 len(days) 만큼 센다.

◾ 만약 days[i] < days[j] 라면 break 한다.

  • 자신의 배포 지연 일수보다 작은 값들을 세는 과정

◾ 만약 cnt가 0이라면 ans 배열에 추가하지 않는다.

 

 

 

 

 

 

 

 

 

 

 

 


 

728x90

'✏️ 𝗔𝗹𝗴𝗼𝗿𝗶𝘁𝗵𝗺 > 프로그래머스' 카테고리의 다른 글

[PG72411] 메뉴 리뉴얼  (0) 2021.11.29
[PG42889] 실패율  (0) 2021.11.24
[PG12901] 2016년  (0) 2021.11.23
[PG42888] 오픈채팅방  (0) 2021.11.21
[PG42860] 조이스틱  (0) 2021.11.06