[프로그래머스 / Python] 기능개발 | 초코더
https://programmers.co.kr/learn/courses/30/lessons/42586
코딩테스트 연습 - 기능개발
프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 ��
programmers.co.kr
문제
작업진도와 작업속도가 주어질 경우 각 배포마다 몇개의 기능이 수행되는지 구하는 함수
접근법
1. 각 작업이 완료되기까지 몇일이 걸리는지를 days리스트를 구해줌
1-1. 각작업의 속도를 계속 더해주면서 한번 더할 때마다 cnt도 증가시켜줌
1-2. 100보다 커지는 지점의 cnt를 저장해주면 그것이 완료되는 날짜
2. 예제처럼 작업진도와 속도가 주어졌을 경우 days는 [7,3,9]가 나온다.
작업진도 | 작업속도 |
[93,30,55] | [1,30,5] |
3. 배포마다 몇개의 기능이 수행되는지 구하는 부분
3-1. days가 [7,3,9]일경우, 7다음 원소들을 비교.
if days원소가 하나밖에 없을경우, 비교할게 없으므로 ans를 fun_cnt리스트에 저장하고 days.pop()하고 종료.
3-2. 7다음원소가 3과같이 작을경우, ans를 증가시키고 3을 제거해줌 (ans초기값은 1임 !! 자기자신포함하기때문)
3-3. 7다음원소가 9와같이 클경우, 이전에 7보다 작은 원소들의 개수가 저장된 ans를 fun_cnt리스트에 저장해줌
, ans를 1로 초기화시키고 7을 제거해줌
3-1 ~ 3-3까지의 과정을 days가 빌때까지 반복한다.
전체코드
def solution(progresses,speeds):
#days는 각 기능개발이 몇일 걸리는지 저장하는 리스트
days=[]
#speed만큼 더해주면서 100을 넘기는 지점의 날짜를 리턴해서 days에 저장
for i in range(len(progresses)):
s=progresses[i]
cnt=0
while s<100:
s+=speeds[i]
cnt+=1
days.append(cnt)
#days
ans=1
fun_cnt=[]
i=1
while days:
if len(days)==1:
fun_cnt.append(ans)
days.pop()
#다음원소가 작을경우 다음원소제거하고 ans증가
elif days[i-1]>=days[i]:
ans+=1
days.pop(i)
#다음원소가 클경우 이전원소제거하고 ans를 리스트에 저장시키고 ans초기화
else:
fun_cnt.append(ans)
days.pop(i-1)
ans=1
return fun_cnt
print(solution([93,30,55],[1,30,5]))