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 = [933055]
b = [1305]
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

+ Recent posts