개발 진도([97, 98, 95, 94, 96])와 개발 속도([1, 1, 1, 1, 1])의 입력이 각각 주어졌다고 가정하면
개발에 남은 일 수는 [3, 2, 5, 6, 4]일 일것이다. 그렇다면 배포 할 때 포함하는 프로젝트 는[2, 1, 2] 일 것이다.
첫번째 개발 이 3일 걸리는데 그 다음인 2일 걸리는 프로젝트는 첫 번째 3일짜리 프로젝트가 끝날 때 같이 배포 된다는 문제에서 나는 다음과 같은 방안을 생각해 냈다.
첫번 째 3일짜리 프로젝트가 시작된다.
-> 3일짜리 프로젝트, 결과 배열에 1을 추가하고 다음으로 넘어간다.( 결과 : [1], idx = 1 )
-> 2일짜리 프로젝트다. 첫 번째인 3일짜리 프로젝트보다 일찍 끝나므로 이전 프로젝트 배포시 같이 배포한다.( 결과[idx - 1] += 1 -> 결과: [2] )
-> 5일짜리 프로젝트다. 이전에 가장 오래걸리는 3일짜리 프로젝트는 이미 배포했으니 결과 배열에 다시 1을 추가하고 다음으로 넘어간다.( 결과 : [2, 1], idx = 2 )
-> 6일짜리 프로젝트는 더 오래 걸린다. ( 결과 : [2, 1, 1], idx = 3 )
-> 1일짜리 또한 6일짜리 배포 시 같이 배포한다. ( 결과[idx - 1] += 1 -> 결과: [2, 1, 2] )
def solution(progresses, speeds):
answer = []
time = []
remain = []
for i in progresses:
'''
걸리는 시간을 계산한다.
'''
time.append(100 - i)
print(time)
for i in range(len(progresses)):
'''
걸리는 시간에서 개발 속도를 나눈 나머지가 있으면 +1일 아니면 그 날로,
개발에 걸리는 날 수를 저장한다.
'''
#오류났던 부분[1]
remain.append((time[i] // speeds[i]) + 1 if time[i] % speeds[i] > 0 else time[i] // speeds[i])
print(remain)
prev = 0
idx = 0
for day in remain:
if day > prev:
answer.append(1)
idx +=1
prev = day
print(day)
else:
answer[idx-1]+=1
print('기다려야함',next_remain)
print(f'prev = {prev}, day = {day}, idx = {idx}')
print(f'리턴값 : {answer}')
return answer
제출 시 테스트 케이스 마지막인 11번을 하나를 제외한 나머지 10개는 통과하였는데
오류났던부분[1]의 상황은 다음과 같았다.
오류의 원인은 개발 진도는 90%, 속도는 4% 일 때,
남은 진도/속도의 몫은 2지만 나머지가 0.5 이다.
오류났던부분[1]의 코드는 2일이 걸린다고 말해준다.
하지만 남은 시간이 있을 때 하루를 추가해줘야 한다는 조건을 간과하였다.
# 오류 코드
remain.append(time[i] // speeds[i])
# 통과 코드
remain.append((time[i] // speeds[i]) + 1 if time[i] % speeds[i] > 0 else time[i] // speeds[i])