코딩테스트 연습 - 기능개발

Gyuhan Park·2021년 7월 15일
0

코딩테스트 정복

목록 보기
10/47

코딩테스트 연습 - 기능개발

기능 개선 작업중이다. 작업 진도와 속도를 통해 각 배포마다 몇 개의 기능이 배포되는지 구하라.

# 오류코드

각각의 작업이 몇일 걸리는지 소요시간을 미리 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
profile
단단한 프론트엔드 개발자가 되고 싶은

0개의 댓글