Algorithm/프로그래머스
[프로그래머스] 스택/큐 _ 기능개발 (파이썬 level2)
sdoaolo
2022. 5. 26. 19:27
728x90
프로그래머스 스택 큐를 이용한 기능개발이라는 문제다.
https://programmers.co.kr/learn/challenges
코딩테스트 연습
기초부터 차근차근, 직접 코드를 작성해 보세요.
programmers.co.kr
테스트케이스 그림으로 확인 슈도코딩
1) 작업이 마감되기까지 몇일이 걸리나 계산 후 리스트에 할당
(어떤일의 남은 작업퍼센트)를 (하루에 개발가능한 퍼센트)로 나누었을때 나머지가 0이 아니면 하루를 더 추가하면 된다.
n = len(progresses)
#1_ 작업이 마감되기까지 몇일이 걸리나 계산.
finish_days = []
for i in range(n):
remain = 100 - progresses[i]
day = remain // speeds[i]
if remain % speeds[i] != 0:
day +=1
finish_days.append(day)
이과정을 끝내면 finish_days 라는 리스트는 [7,3,9] 가 된다.
2) now라는 변수에 첫번째 인덱스를 일단 저장 == 0
1부터 n까지 for문을 만든다.
>> finish_days[now] 가 7인데 이후에 이값보다 큰 값을 만나게 되면 그전까지의 것이 한꺼번에 배포가 된다는 뜻이다.
9를 만나면 i는 2일테고, now는 0인 상태이므로
i - now는 한번에 배포가 되는 수가 된다.
answer에 append해주고,
now = i 를 통해 다시 체크할 수 있도록 한다.
마지막 배포의 경우 더 큰값을 만날 수 없으므로
for문을 탈출한 이후에
전체 기능의 개수 n - now를 해서 마지막에 append해준다.
#2_ 인덱스로 접근
now = 0
answer = []
for i in range(1,n):
if finish_days[i] > finish_days[now]:
answer.append(i - now)
now = i
answer.append(n-now)
return answer
전체 코드
def solution(progresses, speeds):
n = len(progresses)
#1_ 작업이 마감되기까지 몇일이 걸리나 계산.
finish_days = []
for i in range(n):
remain = 100 - progresses[i]
day = remain // speeds[i]
if remain % speeds[i] != 0:
day +=1
finish_days.append(day)
#2_ 인덱스로 접근
now = 0
answer = []
for i in range(1,n):
if finish_days[i] > finish_days[now]:
answer.append(i - now)
now = i
answer.append(n-now)
return answer