ProblemSolving/Stack, Queue

프로그래머스 기능 개발 (파이썬)

OSNIM 2022. 5. 5. 13:22
반응형

Level 2 스택/큐

 

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

 

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

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

programmers.co.kr

 

첫번째 정답 코드

from collections import deque
def solution(progresses, speeds):
    answer = []
    proQ = deque(progresses)
    spdQ = deque(speeds)

    while proQ:
        per = proQ.popleft()
        speed = spdQ.popleft()
        #day = speed * (100 - per)
        day = 0

        while per < 100:
            per += speed
            day += 1

        cnt = 0  # 큐 첫번째 이후
        #모두 더하고
        for i in range(len(proQ)):
            proQ[i] += (day * spdQ[i])

        # 그 다음 앞에서 부터 100 넘은거 연속적인 뺴기
        for i in range(len(proQ)):
            if proQ[i] >= 100:
                cnt += 1
            else:
                break

        for i in range(cnt):
            proQ.popleft()
            spdQ.popleft()
        answer.append(cnt + 1)

    return answer

if __name__ == "__main__":
    arr = [[[99,97,95,93], [1,2,3,4]], [[95,95,95,95], [4,3,2,1]], [[55,60,65], [5, 10, 7]],[[95, 90, 99, 99, 80, 99], [1, 1, 1, 1, 1, 1]], [[93, 30, 55], [1, 30, 5]], [[10, 10, 10, 10, 10, 10, 10, 10, 10, 10], [10, 10, 10, 10, 10, 10, 10, 10, 10, 10]]]
    for progresses, speeds in arr:
        solution(progresses, speeds)

첫번째 코드 결과

첫번째만 계산하여 뒤에 day수 만큼 속도를 더해주었습니다.

답은 맞았지만 가독성이 좋지 않다고 생각하여 다음과 같이 코드를 간결화 하여 재제출해보았습니다.

 

두번째 정답 코드

from collections import deque
def solution(progresses, speeds):
    answer = []
    proQ = deque(progresses)
    spdQ = deque(speeds)
    while proQ:
        while proQ[0] < 100:
            for i in range(len(proQ)):
                proQ[i] = proQ[i] + spdQ[i]
        cnt = 0
        while proQ:
            if proQ[0] >= 100:
                cnt += 1
                proQ.popleft()
                spdQ.popleft()
            else:
                break
        answer.append(cnt)
    print(answer)
    return answer

두번째 코드 결과 

두번째 코드가 더 간결하다고 생각했지만 성능은 더 안좋게 나왔습니다. 

day를 한번에 곱해주는 것과 1씩 증가시켜주는 것에서 성능차이가 발생한 것 같습니다. 

 

 

반응형