https://programmers.co.kr/learn/courses/30/lessons/42586
def solution(progresses, speeds):
answer = []
front = 0
count = 1
for i in range(100):
for j in range(len(progresses)):
progresses[j] += speeds[j]
if progresses[front] >= 100:
for k in range(front+1, len(progresses)):
if progresses[k] >= 100:
front += 1
count += 1
else:
break
front += 1
answer.append(count)
count = 1
if front == len(progresses):
print(answer)
break
return answer
def solution(progresses, speeds):
Q=[]
for p, s in zip(progresses, speeds):
if len(Q)==0 or Q[-1][0]<-((p-100)//s):
Q.append([-((p-100)//s),1])
else:
Q[-1][1]+=1
return [q[1] for q in Q]
zip()
을 이용해서 기능의 작업률과 속도를 합쳐서 계산이 쉽도록 했다. -((p-100)//s)
이 부분은 필요한 작업일수를 구하는 계산식이다. 음수(-)로 몫을 구한 다음 다시 양수로 바꿔주었는데 math.ceil()
한 것과 동일하다. Q[i][0]
부분은 작업이 끝나기까지 필요한 일수이며, Q[i][1]
부분은 Q[i][0]
일째에 배포 가능한 기능 수라고 보면 된다. (Q = [... , [days, functions]]) 뒷 작업은 앞 작업이 끝나기까지 필요한 날짜와 비교해서 작으면 이미 앞작업에서 구했던 Q의 원소에서 기능수 부분에 +1 해주고 크면 list Q에 [필요한 일수, 기능수 = 1]의 형태로 새로 추가한다. 원소 개수 만큼 반복이 끝나면 배포 가능한 기능 수 부분만 잘라서 답을 리턴하면 된다.
문제 풀이를 마치고 다른 사람의 코드를 보며 zip이라는 내장함수에 대해 다시 한번 알게 되었다. 과거 파이썬을 배우면서 이론으로만 배우고 실제로는 사용한 적이 없는 함수였으나 이러한 문제풀이를 할 때 zip 함수를 사용하면 코드가 보다 간결해지고 효율성도 좋게 나온다는 것을 깨달으며 앞으로 zip 함수의 사용도 고려하며 코딩을 하여야겠다는 생각을 했다.