본문 바로가기

Coding Test/Programmers

[프로그래머스/파이썬] 기능개발

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
반응형