728x90


📌  풀이 1

우선 remail_days라는 리스트를 만들어 준다.

이 리스트에는 progresses 에서 speeds를 나누어 준 값을 올림 한 값 즉 남은 작업일 수를 저장해준다.

이때 for 문을 이용하여도 되지만 간단히 쓰기 위해 labda 함수를 이용한다. 또한 올림 처리는 math 라이브러리의 ceil 함수를 이용했다.

ramain_days = []
for i, j in zip(progresses, speeds):
    remain_days.append(math.ceil((100 - i) / j))
    
-> 람다식으로 전환

remain_days = list(map(lambda x: (math.ceil((100 - progresses[x]) / speeds[x])), range(len(progresses))))

 

비교대상의 기준이 될 인덱스 temp를 0, result를 1로 잡고 시작한다.

만약 그 기준이 비교대상 보다 크다면 result를 1씩 올리고 continue 처리, 크지 않다면 기준이 되는 temp를 비교대상 인덱스로 바꾸어 주고 결과 리스트에 result를 append 해 준 뒤 result를 다시 1로 바꾸어준다.

 

만약 remain_days = [7, 3, 9] (첫 번째 예시) 라면 temp는 0에서 시작했다가 remain_days [temp] < remain_days [i]가 되는 순간 해당 인덱스인 i로 바뀌고 result는 다시 1이 된다. 

 

마지막 원소까지 비교해야 하므로 시작할 때 문제의 progress의 최대값인 100보다 1이 큰 101을 append 해주고 시작한다.

 

 

코드

import math

def solution(progresses, speeds):
    remain_days = list(map(lambda x: (math.ceil((100 - progresses[x]) / speeds[x])), range(len(progresses))))
    temp = 0
    result = 1
    results = []
    
    remain_day.append(101)
    for i in range(len(remain_day) - 1):
        a = remain_day[temp]
        if a >= remain_day[i + 1]:
            result += 1
            continue
        else:
            results.append(result)
            temp = i + 1
            result = 1
    return(results)

 

 

 

 

 

📌  풀이 2

원리는 풀이 1과 동일하지만 훨씬 깔끔한 코드가 있어 첨부한다.

이 코드의 핵심이자 중요 포인트는 index에러가 발생할 때 즉 위 코드의 101을 넣어준 부분을 처리하는 로직에 현재 result 값을 remain_days (여기서는 daysLeft)에 넣어준 것이다.

 

 

코드

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

복사했습니다!