| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
- Algorithm
- insertion sort
- coding test
- 윤성우의 열혈 자료구조
- Graph
- C programming
- 이스케이프 문자
- 이것이 자바다
- R
- Stack
- 윤성우 열혈자료구조
- stream
- Selection Sorting
- buffer
- Serialization
- 혼자 공부하는 C언어
- list 컬렉션
- datastructure
- s
- JSON
- C 언어 코딩 도장
- 메모리구조
- 알기쉬운 알고리즘
- Today
- Total
Engineering Note
[Programmers] 기능개발 본문
문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/42586
문제 요약 및 해설
배포 순서와 현재 진행 상태가 적힌 배열, 각 기능의 개발 속도가 적힌 배열이 주어 질때 각 배포 마다 몇 개의 기능이 배포 되는지 return 하도록 하는 solution 함수를 완성
이때, 각 기능은 100%일 때 배포가 가능하고, 뒤에 기능이 먼저 개발된다고 하더라도 배포 순서에 따라 앞에 기능이 완료되지 않았다면 배포 할 수 없다. 배포는 하루에 한 번만 이루어지며 하루의 끝에 이루어 진다. 예를 들어 진도율이 95%인 작업의 개발 속도가 하루에 4%라면 첫 날에는 99% 둘 째날에는 100%를 달성할 수 있다. 즉 2일 뒤에 배포가 이루어진다.
알고리즘
1. 모든 기능에 대해 배포 까지 남은 일 수 구하기 (100- 현재 진행도)/속도, 이때 계산된 값은 소수점 첫 째자리에서 반올림 한다.
2. 함께 배포될 기능들을 담을 배열을 만든다.(배포배열)
3. 먼저 배포되어야 하는 순서대로 1번에서 구한 남은 일수를 추출한다.
4. 2에서 만든 배열이 빈 상태라면 3에서 추출한 일수를 담는다. 2에서 만든 배열이 빈상태가 아니라면 현재 가장 먼저 배포되어야 할 기능(0인덱스)과 3에서 추출한 일수를 비교하여 0인덱스 값보다 더 작으면 (0인덱스 값보다 먼저 완료되었다면) 함께 배열에 담는다. 만약 0인덱스 값보다 큰 일수라면 현재까지 배포배열의 담긴 기능들의 수를 answer에 담는다. 그리고 다시 2에서 만든 배포 배열을 초기화하고 현재 가장 빠른 배포기능을 배포배열에 담는다. 완료 후에는 다시 3번으로 돌아간다.
5. 3과 4에서 반복문이 완료되면 마지막으로 배포배열에 담긴 기능들이 있다면 배포배열의 길이를 계산하여 answer에 담는다.
코드
import math
def solution(progresses, speeds):
answer = []
remain_day = []
distribution = []
for index, progress in enumerate(progresses):
remain_day.append(math.ceil((100-progress)/speeds[index]))
for day in remain_day:
if len(distribution) == 0:
distribution.append(day)
elif len(distribution) != 0 and distribution[0] >= day:
distribution.append(day)
elif len(distribution) != 0 and distribution[0] < day:
answer.append(len(distribution))
distribution = []
distribution.append(day)
if len(distribution):
answer.append((len(distribution)))
return answer'Problem Solving > Programmers' 카테고리의 다른 글
| [Programmers] 가장 먼 노드 (0) | 2022.03.21 |
|---|---|
| [Programmers] 큰 수 만들기 (0) | 2022.02.23 |
| [Programmers] 점프와 순간 이동 (0) | 2022.02.02 |
| [Programmers] 3진법 뒤집기 (0) | 2022.01.24 |
| [Programmers] 예상대진표 (0) | 2022.01.23 |