




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(작업의 번호임)를 저장하기 위한 데이터 클래스.
- requestQueue와 taskQueue:
- requestQueue: 작업 요청 시간 기준으로 정렬된 우선순위 큐.
- taskQueue: 작업 시간이 짧은 순으로 정렬된 우선순위 큐.
- 작업 큐 초기화:
- jobs 배열을 Job 객체로 변환하여 requestQueue에 삽입.
- 작업 처리:
- 현재 시간까지 요청된 작업을 taskQueue로 옮김.
- taskQueue에서 가장 우선순위가 높은 작업(작업 시간이 짧은 작업)을 처리.
- 작업이 없는 경우 다음 작업 요청 시간으로 현재 시간을 이동.
- 반환 시간 계산:
- 각 작업의 종료 시간에서 요청 시간을 뺀 값을 누적.
- 총 반환 시간을 작업 수로 나누어 평균 반환 시간을 구함.
'코딩테스트 준비(kotlin) > 자료구조' 카테고리의 다른 글
[백준 / 골드4] 문자열폭발 with kotlin (0) | 2025.02.05 |
---|---|
[프로그래머스 kotlin] 프로세스 (0) | 2025.01.07 |
[프로그래머스] 의상 (kotlin) (0) | 2024.12.29 |
[프로그래머스 , kotlin] 이중우선순위큐 (0) | 2024.08.01 |
[kotlin, 프로그래머스] 베스트앨범 (0) | 2024.07.31 |