CS/Algorithm 문제

[Programmers] 기능개발

[Programmers] 기능개발

 

🎈문제

https://programmers.co.kr/learn/courses/30/lessons/42586

💬설명

  • 입출력에 순서가 있다 -> 스택/큐 생각해보자.
  • 가장 앞에 있는 작업이 완료되는 시점으로 시간이동 -> 100퍼센트 넘어간 작업들 popleft하면서 개수를 세준다.
  • 다른 사람들은 어떻게 풀었을지 구글링 해보니 모든 작업들에 대해 각각이 완료되는 시점을 모두 구해놓은 뒤에 계산해주는 방식도 있었다. (이렇게 하면 더 깔끔할듯?!)

👩‍💻코드

import math


def solution(progresses, speeds):
    answer = []
    while progresses:
        answer.append(0)
        first_progress = progresses[0]
        first_speed = speeds[0]
        
        # 첫번째 작업이 완료되는 시점 구하기
        num = math.ceil((100 - first_progress) / first_speed)
        
        # 구한 시점으로 이동
        for i in range(len(progresses)):
            progresses[i] += speeds[i] * num
        
        # 완료된 작업 개수만큼 pop
        for i in range(len(progresses)):
            if progresses[i] >= 100:
                answer[-1] += 1
            else:
                break
        progresses = progresses[answer[-1]:]
        speeds = speeds[answer[-1]:]
        
    return answer

 

728x90
반응형

'CS > Algorithm 문제' 카테고리의 다른 글

[Programmers] 다리를 지나는 트럭  (0) 2021.10.07
[Programmers] 프린터  (0) 2021.10.07
[Programmers] 베스트앨범  (0) 2021.10.07
[Programmers] 위장  (0) 2021.10.07
[Programmers] 전화번호 목록  (0) 2021.10.07