코딩테스트 준비
프로그래머스(기능개발) with python
Grey Kang
2021. 3. 2. 20:39
반응형
-
문제 설명
프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다.
또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다.
먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇 개의 기능이 배포되는지를 return 하도록 solution 함수를 완성하세요.
제한 사항
- 작업의 개수(progresses, speeds배열의 길이)는 100개 이하입니다.
- 작업 진도는 100 미만의 자연수입니다.
- 작업 속도는 100 이하의 자연수입니다.
- 배포는 하루에 한 번만 할 수 있으며, 하루의 끝에 이루어진다고 가정합니다. 예를 들어 진도율이 95%인 작업의 개발 속도가 하루에 4%라면 배포는 2일 뒤에 이루어집니다
-
solution
이 문제는 우선 앞의 기능이 먼저 개발되어야 한다
progress를 100에서 뺀 값을 speeds에서 iteration으로 빼서 얼마나 필요한지를 알아낸다
# 솔루션을 활용한 풀이
def solution(progresses,speeds):
answer=[]
time=0
num=0
# solution:
while len(progresses)>0:
if progresses[0]+time*speeds[0]>=100: # time이 특정 조건을 만족시킬 때까지 증가
progresses.pop(0) # 만족시키면 queue구조와 같이 선출되어 하나씩 빠진다
speeds.pop(0)
num+=1 # 이 때 1씩 num이 증가 이 때 time은 그대로이므로 기존 time보다 커질 경우만 else로 이동
else:
if num>0: # num이 0보다 크면
answer.append(num) # 정답배열에 추가시킨다
num=0 # num을 초기화시키고
time=0 #time도 초기화시킨다
else: time+=1 # time의 iterater를 증가시킨다
answer.append(num)
return answer
print(solution([93,30,55],[1,30,5]))
print(solution([95, 90, 99, 99, 80, 99],[1, 1, 1, 1, 1, 1] ))
스택/큐 풀이 시 자주 사용되는 방식으로 progresses에서 pop 시킬 때 해당 progress 배열의 수가 0보다 작아지면 반복문을 빠져나가는 while문을 사용한다
이 때 위 문제에서는 뒷배열을 고려했을 때 time의 변수값을 활용하여 위와 같이 결과값을 얻을 수 있다.
반응형