-
프로그래머스 - 기능개발(스택/큐)코딩 테스트 2021. 4. 18. 16:34
programmers.co.kr/learn/courses/30/lessons/42586
코딩테스트 연습 - 기능개발
프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는
programmers.co.kr
# 문제 설명
프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있다.
또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포된다.
먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇 개의 기능이 배포되는지를 return 하도록 solution 함수를 완성하세요.
# 제한사항
- 작업의 개수(progresses, speeds 배열의 길이)는 100개 이하이다.
- 작업 진도는 100 미만의 자연수이다.
- 작업 속도는 100 이하의 자연수이다.
- 배포는 하루에 한 번만 할 수 있으며, 하루의 끝에 이루어진다고 가정한다.
- 예를 들어 진도율이 95%인 작업의 개발 속도가 하루에 4%라면 배포는 2일 뒤에 이루어진다.
# 입출력 예
progresses speeds return [93, 30, 55] [1, 30, 5] [2, 1] [95, 90, 99, 99, 80, 99] [1, 1, 1, 1, 1, 1] [1, 3, 2] # 풀이
- 먼저 각 작업이 끝나기까지 걸리는 날짜를 complete 배열에 저장한다.
- complete 배열을 인덱스 맨 앞부터 확인하며
- 맨 앞에 끝나는 날짜를 m으로 저장하고 해당 날짜에 배포되는 작업의 개수를 end배열에 1로 표시해준다.
- 이후부터 날짜가 m보다 작거나 같으면 해당 날짜에 배포되는 작업의 개수를 1 더해준다 (end배열의 마지막 값).
- 날짜가 m보다 크면 해당 날짜를 m으로 저장하고 해당 날짜에 배포되는 작업의 개수를 1로 표시한다.
def solution(progresses, speeds): complete = [] end = [] tmp = 0 for i in range(len(progresses)): d = 1 while True: tmp = progresses[i] + d*speeds[i] if tmp >= 100: complete.append(d) break d += 1 for j, d in enumerate(complete): if j == 0: m = d end.append(1) continue if d <= m: end[-1] += 1 else: m = d end.append(1) return end
# 고찰
- 파이썬 리스트를 이용해서 쉽게 풀 수 있었다.
'코딩 테스트' 카테고리의 다른 글
프로그래머스 - 프린터(스택/큐) (0) 2021.04.19 프로그래머스 - 주식가격(스택/큐) (0) 2021.04.18 프로그래머스 - 다리를 지나는 트럭(스택/큐) (0) 2021.04.16 프로그래머스 - 베스트앨범(해시) (0) 2021.04.14 프로그래머스 - 위장(해시) (0) 2021.04.14