728x90
나의 풀이
import math
def solution(progresses, speeds):
zipped = zip(progresses, speeds)
days = [math.ceil((100-x)/y) for x, y in zipped]
max_index = [0]
ptr = 0
answer = []
for _ in range(len(days)):
if days[max_index[-1]] >= days[ptr]:
ptr +=1
else:
max_index.append(ptr)
ptr +=1
last_element = len(days)-max_index[-1]
for x in range(len(max_index)-1):
answer.append(max_index[x+1]-max_index[x])
answer.append(last_element)
return answer
import math
a = [93, 30, 55]
b = [1, 30, 5]
ab = zip(a, b)
[math.ceil((100-x)/y) for x,y in ab]
문제의 코드들...
- answer = list(map(lambda x,y: y-x, max_index)).append(last_element)
=> lambda x,y: y-x 이거 자체가 틀림
- zip하지 않은 상태로 여러 개의 리스트를 list comprehension에 동시에 쓸 수 없나봐
- pop은 index를 파라미터로 갖는구나! 원소 그자체가 아니구.
모범 코드
1. math의 ceil을 사용하지 않음
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]
2. 군더더기 없이 담백하게 자료구조를 잘 녹여냄
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
728x90
'개발 > CS study' 카테고리의 다른 글
[프로그래머스] 스택/큐, 주식가격 (0) | 2023.03.30 |
---|---|
[프로그래머스] 스택/큐, 다리를 지나는 트럭 (0) | 2023.03.24 |
[프로그래머스] 스택/큐, 프린터 (0) | 2023.03.24 |
[프로그래머스] 빈 리스트에 대한 처리 (0) | 2023.03.20 |
[프로그래머스] 해시, 베스트앨범 (0) | 2023.03.17 |