https://school.programmers.co.kr/learn/courses/30/lessons/42586?language=python3
📌 문제
문제 설명
프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다.
또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다.
먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇 개의 기능이 배포되는지를 return 하도록 solution 함수를 완성하세요.
제한 사항- 작업의 개수(progresses, speeds배열의 길이)는 100개 이하입니다.
- 작업 진도는 100 미만의 자연수입니다.
- 작업 속도는 100 이하의 자연수입니다.
- 배포는 하루에 한 번만 할 수 있으며, 하루의 끝에 이루어진다고 가정합니다. 예를 들어 진도율이 95%인 작업의 개발 속도가 하루에 4%라면 배포는 2일 뒤에 이루어집니다.
📌 풀이
1. 각 기능이 완료되는데 필요한 기간 계산
2. 배포 가능한 기능의 개수 계산
우선 어떤 기능이 먼저 완성 되더라도 앞에 있는 모든 기능이 완성되지 않으면 배포가 불가능한 점을 기억하자.
- 각 기능이 완료되는 기간을 day_list에 저장한다.
- 첫 번째 기능의 완료 일수를 max_day로 설정하고, 현재 배포될 기능의 개수를 count로 초기화합니다.
- day_list를 순회하면서
- 현재 기능의 완료 일수(day_list[j])가 max_day보다 작거나 같으면, 현재 배포 가능 기능의 개수인 count를 증가시킨다.
- 현재 기능의 완료 일수가 max_day보다 크면:
- 지금까지의 count를 결과 리스트에 추가한다(이는 곧 max_day일자에 배포할 수 있는 기능 개수를 의미) .
- count를 1로 초기화한다.
- max_day를 현재 기능의 완료 일수로 업데이트한다.
- 순회를 마치면 마지막 count를 결과 리스트에 추가한다.
📌 코드
def solution(progresses, speeds):
day_list = []
for i in range(len(speeds)) :
# 100% 달성하기 까지 걸리는기간 리스트 생성
if (100 - progresses[i]) % speeds[i] == 0 :
day_list.append((100 - progresses[i]) // speeds[i])
else :
day_list.append(((100 - progresses[i]) // speeds[i]) +1)
count = 1 , result = []
max_day = day_list[0]
for j in range(1,len(day_list)) :
if day_list[j] <= max_day :
count+= 1
else :
result.append(count)
count = 1 #count 초기화
max_day = max(max_day , day_list[j]) #작업 기간 업데이트
result.append(count)
return result
더 효율적으로 풀 수 있는 방법이 있을 거 같지만, 여기서 어떻게 디벨롭을 진행해야하는지 감이 안잡힌다.
다음주 코드리뷰에서 다른 팀원들의 코드를 구경해야겠다.
'STUDY > Algorithm' 카테고리의 다른 글
[프로그래머스/스택과큐] 프로세스 (0) | 2024.07.12 |
---|---|
[알고리즘/스택과 큐] 프로그래머스 - 올바른괄호 (0) | 2024.07.10 |
[알고리즘/스택과 큐] 프로그래머스 - 같은 숫자는 싫어 (0) | 2024.07.10 |
[알고리즘/정렬] 프로그래머스 - K번째 수 (0) | 2024.07.06 |
[알고리즘/정렬] 프로그래머스 - H-Index (0) | 2024.07.06 |