-
[프로그래머스 / Python] 기능개발 | 초코더알고리즘/프로그래머스 2020. 8. 18. 17:56
https://programmers.co.kr/learn/courses/30/lessons/42586
문제
작업진도와 작업속도가 주어질 경우 각 배포마다 몇개의 기능이 수행되는지 구하는 함수
접근법
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]))
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 / Python] 위장 | 초코더 (0) 2020.08.21 [프로그래머스 / Python] 전화번호 목록 | 초코더 (0) 2020.08.19 [프로그래머스 / Python] 주식가격 | 초코더 (0) 2020.08.18 [프로그래머스 / Python] 올바른 괄호 | 초코더 (0) 2020.08.18 [프로그래머스 / Python] 시저 암호 | 초코더 (1) 2020.01.19