티스토리 뷰

 

코딩테스트 연습 - 기능개발

프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는

programmers.co.kr

이해도

★★★★☆

 

접근방법

  • 빈 배열 만들고, 완성까지 소요되는 날짜를 구한다.
  • 소요 날짜를 비교하면서 더 적게 걸리면 이전에 더 오래걸리는 날짜로 바꾸어주고 진행, 스피드 배열에서 앞에서부터 하나씩 요소를 빼준다.
  • 날짜배열이 나오면 Counter 함수를 사용하여 같은 day가 몇 번 나왔는지 리스트로 만든다.
from collections import Counter

def solution(progresses, speeds):
    days = []

    while progresses:
        day = 0

        while progresses[0] < 100:
            progresses[0] += speeds[0]
            day += 1

        if days and day < days[-1]:
            day = days[-1]
            days.append(day)
            progresses.pop(0)
            speeds.pop(0)

        else:
            days.append(day)
            progresses.pop(0)
            speeds.pop(0)

    cnt = Counter()
    for day in days:
        cnt[day] += 1


    return list(cnt.values())

print(solution([93, 30, 55],[1, 30, 5]))
print(solution([95, 90, 99, 99, 80, 99], [1, 1, 1, 1, 1, 1]))

 

다른 풀이

  • time 변수를 활용한 방법이라고 한다.
  • 설명 추가 예정
def solution(progresses, speeds):
    answer = []
    time = 0
    count = 0

    while progresses:
        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

print(solution([93, 30, 55],[1, 30, 5]))
댓글