본문 바로가기

개발/알고리즘

[프로그래머스] 힙 - 디스크 컨트롤러

반응형
 

코딩테스트 연습 - 디스크 컨트롤러

하드디스크는 한 번에 하나의 작업만 수행할 수 있습니다. 디스크 컨트롤러를 구현하는 방법은 여러 가지가 있습니다. 가장 일반적인 방법은 요청이 들어온 순서대로 처리하는 것입니다. 예를

programmers.co.kr

입력 

각 작업에 대해 작업이 요청되는 시점, 작업의 소요시간을 담은 2차원 배열 jobs가 매개변수로 주어집니다

출력

작업의 요청부터 종료까지 걸린 시간의 평균을 가장 줄이는 방법으로 처리하면
평균이 얼마가 되는지 return 하도록 solution 함수를 작성해주세요

풀이

각 작업의 작업시간을 기준으로 정렬을 한다
이 점을 유의해야하는데 작업은 작업시간이 적더라도 시작할 수 있는 시간이 다른 작업보다 늦다면 후에 처리한다
요청시간이 현재 타이머보다 높다면 다음 작업의 요청시간을 살펴보고
요청시간이 현재 타이머보다 낮다면 작업을 수행한다

 

Swift 전체 코드

var job = jobs.sorted(by: { $0.last! < $1.last! })
var total = 0
var timer = 0
var i = 0

while !job.isEmpty {
    let min = job.sorted(by: { $0.first! < $1.first!}).first!.first!
    
    if timer < min {
        timer = min
    }
    if job[i].first! <= timer {
        total += job[i].last! + timer - job[i].first!
        timer += job[i].last!
        job.remove(at: i)
        i = 0
    } else {
        if job.count == 1 {
            timer = job.first!.first!
        }
        i += 1
    }
    if i > job.count - 1 {
        i = 0
    }
}

return total / jobs.count
반응형