코딩테스트 연습 - 기능개발
기능 개선 작업중이다. 작업 진도와 속도를 통해 각 배포마다 몇 개의 기능이 배포되는지 구하라.
각각의 작업이 몇일 걸리는지 소요시간을 미리 times에 저장하였다. 기준시간과 나머지를 비교하여 앞의 작업보다 더 적게 걸리는 건 앞의 작업과 함께 배포한다. 차이값만큼 count하여 계산해주고 배포한 기능 수만큼 index를 이동한다. 이론적으론 이해했는데 코드가 깔끔하게 나오지 않고 계속 오류가 발생했다.
정확성 0.0 : 시간초과 및 실패. (오류투성이)
import math
def solution(progresses, speeds):
for i in range(len(progresses)):
days = 0
days = math.ceil((100-progresses[i]) / speeds[i])
times.append(days)
print(times)
while True:
if idx+2 >= len(times):
functions = len(times) - idx
idx += functions
functions = 1
break
for i in times[idx+1:]:
if times[idx] <= i:
functions = times.index(i,idx+1) - idx
idx += functions
functions = 1
break
functions += 1
return distribution
몇일간 했는데 안되서 힌트를 찾아봤는데 내가 생각했던 접근방식과 똑같다. 다른점은 배열 일부를 잘라 반복문을 돌리지 않고 0번째부터 순서대로 돌았다. 너무 복잡하게 생각해서 반복문을 제대로 못짠 것 같다.
2개의 flag를 만들어서 1개는 순차적으로 쭉 돌고 나머지 1개는 차이값만큼 이동하여 배열 한바퀴만 돌면 문제를 해결할 수 있다.
import math
def solution(progresses, speeds):
times = []
answer = []
front = 0
for i in range(len(progresses)):
days = 0
days = math.ceil((100-progresses[i]) / speeds[i])
times.append(days)
print(times)
for idx in range(len(times)):
if times[idx] > times[front]:
answer.append(idx - front)
front = idx
answer.append(len(times) - front)
return answer
queue 개념을 이용하여 맨 앞의 작업부터 pop()해준다. time 변수를 이용하여 앞의 작업에서 소요된 시간만큼을 똑같이 연산하여 count를 증가시킬 수 있다.
def solution(progresses, speeds):
answer = []
time = 0
count = 0
while len(progresses)> 0:
if (progresses[0] + time*speeds[0]) >= 100:
progresses.pop(0)
speeds.pop(0)
count += 1
else:
if count > 0:
answer.append(count)
count = 0
time += 1
answer.append(count)
return answer