[프로그래머스] 기능개발

zunzero·2022년 8월 28일
0

알고리즘(파이썬)

목록 보기
43/54

https://school.programmers.co.kr/learn/courses/30/lessons/42586

문제 해결의 아이디어를 떠올리는 데에는 어려움이 없었다.
각 공정별로 완료까지 남은 기간을 days 배열에 담아둔다.
예를 들어 days = [5, 10, 1, 1, 20, 1] 이라고 하자.
5일짜리 공정 1개, 10일, 1일, 1일짜리 공정 3개, 20일, 1일짜리 공정 2개, 즉 [1, 3, 2]를 정답으로 반환할 수 있다.

하지만 그러기 위한 비교문을 작성하는데에 시간이 오래 걸렸고 너무 복잡하게만 느껴졌다.

그래서 결국 구현 아이디어를 구글링의 도움을 살짝... 받았다.

def solution(progresses, speeds):
    days = []
    for i in range(len(progresses)):
        mod = 100 - progresses[i]
        if (mod % speeds[i]) > 0:
            day = mod // speeds[i] + 1
        else: day = mod // speeds[i]
        days.append(day)                
    print(days)
    answer = []    
    
    index = 0
    for i in range(len(days)):
        if days[index] < days[i]:
            answer.append(i - index)
            index = i
    answer.append(len(days) - index)
    return answer

index 값을 0으로 초기화해둔다.
days를 순회하면서 0번째 index보다 큰 값이 나왔을 때, 해당 index와 초기 index를 뺀 값을 answer에 삽입한다.
즉, [5, 10, 1, 1, 20, 1]의 경우 10이 5보다 크기 때문에 둘의 index값 차이인 1을 answer에 저장한다.
다음 index값은 순회를 멈춘 곳으로 저장한다.

다음 과정은 10을 그 뒷 값들과 비교하며 10보다 큰 값이 나오는 순간 멈춘다.
20의 경우 10보다 큰 첫 값이므로 여기서 순회를 멈춘다.
20과 10의 index값 차이를 answer에 저장하고, index 값을 20의 index값으로 수정하여 마저 계산한다.

20의 경우 본인보다 큰 값을 찾을 수 없다.
마지막 과정이기 때문이다.
마지막 과정은 answer에 days 배열의 길이에서 해당 값의 index값을 뺀 값을 저장한다.

구현이 조금 어려웠다... 역시 level2...

profile
나만 읽을 수 있는 블로그

0개의 댓글