- 문제 링크: programmers.co.kr/learn/courses/30/lessons/42586
모든 기능이 병렬적으로 각자의 속도에 맞춰 개발되는데, 맨 앞에서부터 배포될 수 있고, 한번에 앞에서부터 여러개씩 배포가 가능하다고 합니다.
이때 각 배포마다 몇개의 기능이 배포되는지를 알고 싶다고 합니다.
적당히 ceil을 써서 각 기능마다 며칠이 있어야 100퍼센트 이상이 되는지 확인하고, 그 날짜만큼 모든 job들의 작업 진도를 각 속도를 곱해 더해주면 됩니다.
풀이 보니까 pop(0)을 쓴 분도 있던데, 파이썬에서 list는 C++ std::vector처럼 동적 배열이기 때문에 앞에서 빼는 짓을 할 때마다 O(n)의 시간복잡도를 가지니 그냥 인덱스로 관리해주는게 좋습니다
그리고 실수 연산은 오차가 생길 수 있으니 ceil 함수 사용보다는 나머지 0 계산을 한다든지 하는 정수 연산을 하는게 더 정확합니다
def solution(progresses, speeds):
answer = []
num_of_jobs = len(progresses)
idx = 0
while idx < num_of_jobs:
required_day = ((100-progresses[idx]) // speeds[idx]) + ((100-progresses[idx]) % speeds[idx] != 0)
for i in range(idx, num_of_jobs):
progresses[i] += required_day * speeds[i]
counter = 1
for i in range(idx+1, num_of_jobs):
if progresses[i] < 100:
break
counter += 1
answer.append(counter)
idx += counter
return answer
대충 짜보면 위와 같습니다
반응형
'Online Judge > 프로그래머스' 카테고리의 다른 글
[프로그래머스][Python] 방금 그곡 (0) | 2021.03.30 |
---|---|
[프로그래머스][C++] 2020 KAKAO: 가사 검색 (0) | 2020.08.25 |
[프로그래머스][C++] 이상한 문자 만들기 (0) | 2020.06.27 |
[프로그래머스][C++] 2020 KAKAO: 자물쇠와 열쇠 (0) | 2020.04.30 |