경험의 기록

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

 

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

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

programmers.co.kr

 

 

import java.util.*

class Solution {
    fun solution(jobs: Array<IntArray>): Int {
    var answer = 0

    // 소요 시점 순으로 오름차순 정렬, 같다면 요청 시간 순으로 오름차순 정렬
    var q = PriorityQueue<IntArray>(compareBy({it[1]},{it[0]}))

    // 요청 시점 순으로 오름차순 정렬, 같다면 소요 시간 순으로 오름차순 정렬
    var q2 = PriorityQueue<IntArray>(compareBy({it[0]},{it[1]}))
    var two = 0

    q2.addAll(jobs)

    // 모든 작업이 끝날 때까지
    while (!q.isEmpty() || !q2.isEmpty()) {

        // q2에서 할수 있는 작업들을 q에 다 넣어줌
        while (!q2.isEmpty() && q2.peek()[0] <= two) {
            q.add(q2.poll())
        }

        // 소요 시간 짧은 것부터 수행
        if (!q.isEmpty()) {
            two += q.peek()[1]
            // 시간 누적
            answer += two - q.peek()[0]
            q.poll()
        }

        // q2는 남아있지만 수행할 수 있는 작업이 없을 때
        else if (!q2.isEmpty()) {
            two = q2.peek()[0]
        }
    }
       
        return answer/jobs.size
    }
}
반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading