코딩문제풀이/프로그래머스

[Python] 기능 개발

코딩하는 포메라니안 2021. 8. 24. 22:35

1. 문제

 

 

 

2. 풀이 과정

 

방법 1) 남은 날짜 계산할 때, 나머지가 있으면 올리도록 한다. 최대 날짜가 갱신되면 바로 출력한다.

def solution(progresses, speeds):
    answer = []
    
    max_day = 0
    pre_idx = 0
    for i in range(len(progresses)):
        temp = 100 - progresses[i]
        day = temp//speeds[i]
        if temp % speeds[i] != 0:
            day += 1
            
        if max_day < day: #최대 걸리는 날보다 크면 그 앞의 기능들 먼저 배포
            max_day = day
            if i != 0:
                answer.append(i-pre_idx)
                pre_idx = i
                
        if i==len(progresses)-1: #마지막 데이터에 올 때, 그 뒤에 더 걸리는 날이 없으니 배포
            answer.append(i+1-pre_idx)
            break
    
    return answer

 

 

방법 2) 남은 날짜를 계산할 때, 음수의 절댓값은 올림이 되는 걸 활용한다. 최대 날짜가 나오면 배열에 저장해둔다.

def solution(progresses, speeds):
    answer = []
    arr = []
    max_day = -1
    for idx in range(len(progresses)):
    	#음수로 올림 후 다시 -를 붙여 양수로 변환
        day = -((progresses[idx]-100)//speeds[idx])
        if day > max_day:
            arr.append(idx)
            max_day = day
            
    arr.append(len(progresses))
    
    for i in range(len(arr)-1):
        answer.append(arr[i+1]-arr[i])
        
    return answer

 

+) 더 개선한 방법

def solution(progresses, speeds):
    answer = []
    day = 0
    for p, s in zip(progresses, speeds):
        if p + s*day >= 100: #현재 날짜 기준으로 완료되었으면
            answer[-1] += 1
        else:
            day = -((p-100)//s) #완료 안되었으면 완료되는 날짜로 update
            answer.append(1)
    return answer

'코딩문제풀이 > 프로그래머스' 카테고리의 다른 글

[Python] 다리를 지나는 트럭  (0) 2021.08.25
[Python] 프린터  (0) 2021.08.25
[Python] 위장  (0) 2021.08.24
[Python] 전화번호 목록  (0) 2021.08.24
[Python] K번째 수  (0) 2021.08.23