progress 배열 안에 있는 각 값에 speeds 배열 안에 있는 각 값을 누적해주다가 progress 배열의 맨 앞에 있는 값이 100이상이 되면 count에 값을 1 올려주고 progress와 speeds에 있는 맨 앞의 값을 삭제한다.
hundred 플래그를 사용한 이유는 while문을 돌면서 마구잡이로 answer 배열에 count를 삽입하지 않기 위해서다. 첫 while문에서 플래그는 False이지만 progress 배열에 값이 존재하면서 첫 값이 100이상이면 플래그는 True가 된다. 조건을 만족하지 않으면 while문을 빠져나온 뒤
if hundred==True 문으로 가는데 플래그가 True면 그제서야 answer 배열에 count를 삽입하게 된다.
def solution(progresses, speeds):
answer=[]#답 넣기 위한 빈 배열
while len(progresses):#배열이 비어 있지 않다면 반복하기
hundred = False #작업이 완료되었는지 구분하기 위한 플래그
count=0 #완료된 작업 수
for i in range(len(progresses)):#존재하는 작업에 진척도 누적
progresses[i]+=speeds[i]
#print(progresses)
#print('i',i,progresses)
while len(progresses)!=0 and progresses[0]>=100:#작업 배열이 비어있지 않고 첫 작업이 완료된 상태면 반복
hundred=True #작업물이 완료되었으므로 플래그는 True
count+=1 #완료된 작업물 하나 누적
#print('count',count)
#print('hund:',hundred)
del progresses[0] #작업 배열에서 완료된 작업 하나 삭제
del speeds[0] #속도 배열에서 완료된 작업에 대한 속도 하나 삭제
#print('pro',progresses)
if hundred==True: #첫 while문은 계속 도는데 아무 조건없이 count를 삽입하면 안되니까 완료된 작업이 있는 경우에만 count 삽입
answer.append(count)
#print('answer',answer)
return answer #맨 앞에 있는 작업물이 완료될 때마다 연이어서 완료된 작업의 개수에 대한 배열을 반환
print(solution([93,30,55],[1,30,5]))
print(solution([40, 93, 30, 55, 60, 65],[60, 1, 30, 5 , 10, 7]))
print(solution([93, 30, 55, 60, 40, 65],[1, 30, 5 , 10, 60, 7]))
https://programmers.co.kr/learn/courses/30/lessons/42586?language=python3
'알고리즘 문제' 카테고리의 다른 글
프로그래머스 폰켓몬 (0) | 2018.10.05 |
---|---|
프로그래머스 다리를 지나는 트럭 (4) | 2018.10.05 |
프로그래머스 탑 (0) | 2018.10.05 |
프로그래머스 가장 큰 수[아직 못 품..] (0) | 2018.10.05 |
프로그래머스 프린터 (0) | 2018.10.02 |