프로그래머스 LV2 - 기능개발
내 풀이
import math
def solution(progresses, speeds):
count = 1
recent = 0
answer = []
for progress, speed in zip(progresses, speeds):
date = math.ceil((100 - progress) / speed)
if recent == 0:
recent = date
continue
if recent >= date:
count += 1
else:
answer.append(count)
recent = date
count = 1
answer.append(count)
return answer
다른 풀이
def solution(progresses, speeds):
result = [] # 각 배포마다 완료된 작업 수를 저장할 리스트
# 아직 작업 중인 경우 반복
# speeds가 빈 배열이 아닐 땐 True 반환, 빈 배열일 땐 False 반환
while speeds:
# 각 작업의 1일씩 진도 업데이트
for idx, speed in enumerate(speeds):
progresses[idx] += speed
count = 0 # 배포할 작업 수를 세는 변수
# 맨 앞 작업 진도가 100% 이상되면, progresses와 speeds 리스트에서 해당 작업 제거하고 작업 수 증가
# progresses가 빈 배열이 아닐 땐 True 반환, 빈 배열일 땐 False 반환
while progresses and progresses[0] >= 100:
del progresses[0], speeds[0]
count += 1
# 배포될 작업 수를 결과 리스트에 추가
if count > 0:
result.append(count)
return result
출처: https://1ets-just-do-it.tistory.com/80 [파이썬은 신이야🔥🔥🔥:티스토리]
풀이 해석
- for문을 통해 각 작업의 1일진도를 업데이트 하였고 progresses[0]이 100을 넘었을 경우 삭제하면서 count를 증가시키는데 이를 while문 조건이 성립하는 하에선 계속 반복한다 while 문이 끝났을 때 count를 append 해준다
배울 점
- while 문과 작업이 끝난 progress와 speed를 del 해주며 지워나가는 사고
- while 문 조건은 100이 넘는게 있으면 없어질때까지 돌아가게 하는 사고
댓글남기기