728x90

나의 풀이
import math
def solution(progresses, speeds):
days_left = []
answer = []
temp = 0
for p, s in zip(progresses, speeds):
days_left.append(math.ceil((100-p)/s))
for d in days_left:
if temp >= d:
answer[-1] += 1
else:
temp = d
answer.append(1)
return answer
2차원 list를 이용한 짧은 풀이
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]
- math.ceil 없이 -((p-100)//s) 사용
시간을 올리면서 pop
def solution(progresses, speeds):
print(progresses)
print(speeds)
answer = []
time = 0
count = 0
while len(progresses)> 0:
if (progresses[0] + time*speeds[0]) >= 100:
progresses.pop(0)
speeds.pop(0)
count += 1
else:
if count > 0:
answer.append(count)
count = 0
time += 1
answer.append(count)
return answer
lamda와 try-catch를 이용한 풀이
from math import ceil
def solution(progresses, speeds):
daysLeft = list(map(lambda x: (ceil((100 - progresses[x]) / speeds[x])), range(len(progresses))))
count = 1
retList = []
for i in range(len(daysLeft)):
try:
if daysLeft[i] < daysLeft[i + 1]:
retList.append(count)
count = 1
else:
daysLeft[i + 1] = daysLeft[i]
count += 1
except IndexError:
retList.append(count)
return retList
deque를 활용한 풀이
from collections import deque
def solution(progresses, speeds):
answer = []
progresses = deque(progresses)
speeds = deque(speeds)
while progresses:
a=0
while 1:
if progresses[0] >= 100:
a+=1
progresses.popleft()
speeds.popleft()
if len(progresses) == 0 and a >0:
answer.append(a)
break
else:
if a>0:
answer.append(a)
for i in range(len(progresses)):
progresses[i]+=speeds[i]
break
return answer반응형
'Coding Test > Programmers' 카테고리의 다른 글
| [프로그래머스/MySQL] 최댓값 구하기 (0) | 2022.05.31 |
|---|---|
| [프로그래머스/파이썬] 프린터 (0) | 2022.05.31 |
| [프로그래머스/파이썬] 베스트앨범 (0) | 2022.05.24 |
| [프로그래머스/파이썬] 위장 (0) | 2022.05.24 |
| [프로그래머스/파이썬] 전화번호 목록 (0) | 2022.05.24 |