import java.util.PriorityQueue
class Solution {
fun solution(jobs: Array<IntArray>): Int {
// Job 데이터 클래스 정의
data class Job(val requestTime: Int, val duration: Int, val id: Int)
// 요청 시간 순으로 정렬된 큐
val requestQueue = PriorityQueue<Job>(compareBy({ it.requestTime }, { it.id }))
// 작업 시간이 짧은 순서로 정렬된 작업 대기 큐
val taskQueue = PriorityQueue<Job>(compareBy({ it.duration }, { it.requestTime }, { it.id }))
// 요청 배열을 Job 객체로 변환 후 요청 시간 기준으로 큐에 추가
jobs.forEachIndexed { index, job ->
requestQueue.add(Job(job[0], job[1], index))
}
var currentTime = 0 // 현재 시각
var totalTurnaroundTime = 0 // 총 반환 시간
while (requestQueue.isNotEmpty() || taskQueue.isNotEmpty()) {
// 현재 시간까지 도달한 작업들을 대기 큐로 이동
while (requestQueue.isNotEmpty() && requestQueue.peek().requestTime <= currentTime) {
taskQueue.add(requestQueue.poll())
}
if (taskQueue.isNotEmpty()) {
// 작업 시간이 짧은 작업 처리
val task = taskQueue.poll()
currentTime += task.duration
totalTurnaroundTime += currentTime - task.requestTime
} else {
// 처리할 작업이 없으면 시간 경과
currentTime = requestQueue.peek().requestTime
}
}
// 평균 반환 시간 계산 후 정수 부분 반환
return totalTurnaroundTime / jobs.size
}
}
코드 설명
Job 클래스 정의:
작업의 요청 시간, 소요 시간, 작업 ID(작업의 번호임)를 저장하기 위한 데이터 클래스.