본문 바로가기
Algorithm/Programmers

[Algorithm/Programmers] 기능 개발 (스택/큐) Swift

by thoonk: 2020. 11. 22.

문제 풀이: 

1. 각 기능 별로 완성되는 기간 확인

2. 첫 기능의 완성 기간을 기준으로 그 다음 기능의 기간과 비교하여 작다면 같이 pop 

3. 다음 기능의 완성 기간이 더 클 때까지 2번 반복

4. 모든 기능이 끝나지 않았다면 2번으로 돌아가서 반복

import Foundation

//테스트 케이스
//var progresses = [93, 30, 55]
//var speeds = [1, 30, 5]

//var progresses = [95, 90, 99, 99, 80, 99]
//var speeds = [1,1,1,1,1,1]

func solution(_ progresses:[Int], _ speeds:[Int]) -> [Int] {
    let len = progresses.count
    var result = [Int]()
    var day = Array(repeating: 0, count: len)
    var temp = 0
    var num = 0
    
    // 해당 작업 기간을 계산하기 위한 반복문
    for i in stride(from: 0, to: len, by: 1){
    	// 처음 기능 개발의 완성도
        temp = progresses[i]
        while true{
        	// 기능 개발 속도 더해주기
            temp += speeds[i]
            // 기능 개발이 완성되는 기간
            day[i] += 1
            //기능 개발 완성이 100퍼가 넘을 경우
            if temp >= 100 {
                break
            }
        }
    }
    // 기능이 다 완료되기 전까지
    while !day.isEmpty {
        var cnt = 0
        // 처음 개발 기간 저장
        num = day.removeFirst()
        // 개발 완성된 기능 증가
        cnt += 1
        // 처음 개발 기간보다 다음 개발 기간이 적거나 같을 경우
        while !day.isEmpty && num >= day.first! {
        	// 개발 완성된 기능 1 증가
            cnt += 1
           	// 기간이 더 적으니 한꺼번에 배포
            day.removeFirst()
        }
        한 번의 배포당 기능 수 저장
        result.append(cnt)
    }
    
    return result
}

//print(solution(progresses, speeds))

문제: 

https://programmers.co.kr/learn/courses/30/lessons/42586?language=swift

 

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

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

programmers.co.kr

 

댓글