1. 문제
2. 풀이 과정
방법 1) 남은 날짜 계산할 때, 나머지가 있으면 올리도록 한다. 최대 날짜가 갱신되면 바로 출력한다.
def solution(progresses, speeds):
answer = []
max_day = 0
pre_idx = 0
for i in range(len(progresses)):
temp = 100 - progresses[i]
day = temp//speeds[i]
if temp % speeds[i] != 0:
day += 1
if max_day < day: #최대 걸리는 날보다 크면 그 앞의 기능들 먼저 배포
max_day = day
if i != 0:
answer.append(i-pre_idx)
pre_idx = i
if i==len(progresses)-1: #마지막 데이터에 올 때, 그 뒤에 더 걸리는 날이 없으니 배포
answer.append(i+1-pre_idx)
break
return answer
방법 2) 남은 날짜를 계산할 때, 음수의 절댓값은 올림이 되는 걸 활용한다. 최대 날짜가 나오면 배열에 저장해둔다.
def solution(progresses, speeds):
answer = []
arr = []
max_day = -1
for idx in range(len(progresses)):
#음수로 올림 후 다시 -를 붙여 양수로 변환
day = -((progresses[idx]-100)//speeds[idx])
if day > max_day:
arr.append(idx)
max_day = day
arr.append(len(progresses))
for i in range(len(arr)-1):
answer.append(arr[i+1]-arr[i])
return answer
+) 더 개선한 방법
def solution(progresses, speeds):
answer = []
day = 0
for p, s in zip(progresses, speeds):
if p + s*day >= 100: #현재 날짜 기준으로 완료되었으면
answer[-1] += 1
else:
day = -((p-100)//s) #완료 안되었으면 완료되는 날짜로 update
answer.append(1)
return answer
'코딩문제풀이 > 프로그래머스' 카테고리의 다른 글
[Python] 다리를 지나는 트럭 (0) | 2021.08.25 |
---|---|
[Python] 프린터 (0) | 2021.08.25 |
[Python] 위장 (0) | 2021.08.24 |
[Python] 전화번호 목록 (0) | 2021.08.24 |
[Python] K번째 수 (0) | 2021.08.23 |