본문 바로가기
코딩테스트

[프로그래머스] 스택/큐 - 기능개발

by 박매트 2024. 1. 26.

 

 

나의 답

import math 

def solution(progresses, speeds):
    dic = []
    
    for index, value in enumerate(progresses):
        a = math.ceil((100 - value)/speeds[index])
        dic.append(a)
    
    result = []
    max = dic[0]   
    cnt = 0
    
    for i in range (len(dic)-1):
        cnt+=1
        if max <dic[i+1]:
            result.append(cnt)
            cnt = 0
            max=dic[i+1]
            
    result.append(cnt+1)
    
    return result

 

각 프로세스 당 걸리는 시간을 idc 리스트로 관리하였다.

result는 최종 답을 넣을 리스트이고, 

dic 리스트 숫자에서 기존에 있던 큰 값보다 큰 값이 나올 때마다 숫자를 새로 카운트해주고자 하였다.

맨 마지막 값은 그냥 따로 append를 하고 말았는데, 좋은 풀이는 아닌듯 싶다.

 

 

 

다른 사람 풀이

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

 

이렇게 list랑 map 을 통해서 간결하게 값을 넣을 수 있다니..

파이썬 시간에 분명 배운 것 같은데 기억이 안난다.

아래 로직은 거의 비슷한 것 같은데 except IndexError를 이용해서 풀다니...

저렇게 하면 마지막 값을 append 할 수 있군.