본문 바로가기
Algorithm/Programmers

[고득점 Kit(스택/큐)] 기능개발 (Swift, Python)

by 원만사 2022. 1. 15.
반응형

 

 

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

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

programmers.co.kr

 

풀이

 입력으로 주어진 progresses를 순차적으로 탐색하며 작업 진도가 얼마나 남았는지를 체크한다. 현재 작업을 배포하기 위해서 며칠이 필요한가를 체크하고 다음 작업이 해당 일 수만큼 작업했을 때 배포가 가능한지 체크한다. 배포가 불가능한 작업을 만날때까지 카운트를 하고 불가능한 작업을 만나면 다시 새롭게 위 과정을 반복한다. 

 

코드

[Swift]

import Foundation

func solution(_ progresses:[Int], _ speeds:[Int]) -> [Int] {
    var answer: [Int] = []
    
    var day: Int = 0 // 작업 일 수
    var count: Int = 0 // 배포가 가능한 작업의 개수
    
    for i in 0..<progresses.count {
        var restProgress: Int = 100 - progresses[i] // 남은 진도
        let speed: Int = speeds[i]
        
        // 현재 일수만큼 작업했을 때 배포가 가능하다면 배포 가능한 작업을 하나 증가시킨다.
        if day * speed >= restProgress {
            count += 1
        } else { // 불가능하면 추가적으로 며칠이 더 필요한가를 체크한다.
            answer.append(count)
            count = 1
            
            restProgress -= day * speed
            
            if restProgress % speed == 0 {
                day += restProgress / speed
            } else {
                day += restProgress / speed + 1
            }
        }
    }
    
    // 마지막에 answer배열에 0이 있으므로 하나를 pop해준다.
    answer.append(count)
    answer.removeFirst()
    
    return answer
}

 

[Python]

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

    day = 0 # 작업 일 수
    count = 0 # 배포가 가능한 작업의 개수

    for i in range(len(progresses)):
        restProgress = 100 - progresses[i] # 남은 진도
        speed = speeds[i] 

        # 현재 일수만큼 작업했을 때 배포가 가능하다면 배포 가능한 작업을 하나 증가시킨다.
        if day * speed >= restProgress:
            count += 1
        else: # 불가능하면 추가적으로 며칠이 더 필요한가를 체크한다.
            answer.append(count)
            count = 1 
            
            restProgress -= day * speed
            
            if restProgress % speed == 0:
                day += restProgress // speed 
            else:
                day += restProgress // speed + 1

    # 마지막에 answer배열에 0이 있으므로 하나를 pop해준다.
    answer.pop()
    answer.append(count)

    return answer
반응형

댓글