Python/Coding Test

[Coding Test] 기능개발

gangee 2023. 7. 4. 18:26

목차

    728x90
    반응형

    프로그래머스 코딩테스트 2단계 : 기능개발(스택/큐)

    문제 설명

    프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다.

    또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다.

    먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇 개의 기능이 배포되는지를 return 하도록 solution 함수를 완성하세요.

    문제 풀이

    • 작업일 수를 세기 위한 days와 배포 날짜에 배포 가능한 기능 수를 세기 위한 cnt 선언
    • while 반복문을 통해 작업의 개수만큼 반복
    • 조건문을 통해 (진행된 작업) + (하루 개발속도) * (작업일 수)가 100 이 되거나 넘으면
      = 작업이 완료되면, pop함수를 이용하여 progresses, speeds를 삭제하고 다음으로 넘어 감
    • 다음으로 넘어가면 cnt에 1을 더해 줌
    • 작업이 완료되지 않은 경우, 두번째 조건문을 통해 cnt가 0보다 크면 앞에 작업이 끝난 기능과 함께 배포가 불가능 한 것이므로
      이때의 cnt를 정답 리스트에 추가해주고 초기화
    • 두번째 조건문이 끝나고 나면 days에 1을 더해 다음으로 넘어감
    • 반복문이 완료된 후 나온 cnt의 값을 정답 리스트에 추가

    정답 코드

    def solution(progresses, speeds):
        days = 0
        cnt = 0
        answer = []
    
        while progresses:
            if  progresses[0] + speeds[0] * days >= 100:  # 작업이 완료되었을 경우
                # FIFO(큐) 자료구조를 이용해 완료된 기능을 삭제하고 다음으로 넘어감
                progresses.pop(0)
                speeds.pop(0)
                cnt += 1
            else:  # 작업이 완료되지 않았을 경우
                if cnt > 0:  # cnt가 0보다 크다면 앞에 작업과 같은데 실행이 불가능
                    answer.append(cnt)
                    cnt = 0
                days += 1
    
        answer.append(cnt)
    
        return answer
    * 이 문제는 프로그래머스 코딩테스트 연습 2단계 문제입니다.
    728x90
    반응형