코딩 테스트
[python3] 프로그래머스 레벨 2 - 기능개발
귀건
2021. 6. 17. 02:39
728x90
반응형
https://programmers.co.kr/learn/courses/30/lessons/42586?language=python3
코딩테스트 연습 - 기능개발
프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는
programmers.co.kr
from collections import deque
from collections import Counter
def solution(progresses, speeds):
answer = []
complete = {}
index_list = []
# 몇일 남았는지를 계산하자.
day = 1
while True:
if len(complete) == len(progresses):
break
for i in range(len(progresses)):
if (i in index_list) == True :
continue
progresses[i] += speeds[i]
if progresses[i] >= 100:
complete.setdefault(i, day)
index_list.append(i)
day += 1
s_complete = dict(sorted(complete.items(), key=lambda x : x[0]))
max = 0
for i in s_complete:
if s_complete[i] > max :
max = s_complete[i]
else:
s_complete[i] = max
a = list(s_complete.values())
b = dict(Counter(a))
for i in b:
answer.append(b[i])
return answer
각 기능을 완료하는 데 걸리는 일수를 먼저 계산함.
그 후 각 프로세스가 걸리는 시간들을 0번 인덱스부터 확인하는데, 0번 인덱스가 걸리는 시간보다 1번이 걸리는 시간이 작다면, 0번의 걸리는 시간을 덮어씌웁니다. 그럼 이제 0번 보다 오래 걸리는 녀석이 나올때까지 0번 인덱스의 값으로 덮어씌워지게 됩니다.
이런 식으로 모든 프로세스를 덮어씌우다 보면, 각 프로세스가 일정한 값들로 덮어씌워지게 됩니다. 우리는 한번에 배포되는 프로세스의 갯수를 각각 계산해야 하므로 Counter를 이용해 일정 값들이 몇개 있는지 세주면 문제의 답이 도출됩니다. ㅎ
다른사람의 풀이
1. 기능 완료에 걸리는 일수 계산을 더 쉽게 할 수 있었다. ceil 함수를 사용함.
2. 이런 방법 이외에도 deque를 이용하는 방법도 있었다.
728x90
반응형