Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- indices
- sortedBy
- intarray
- hackerrank
- Queue
- programmers
- foreach
- solution
- 코틀린
- Java
- Main
- 알고리즘
- Util
- contentToString
- 프로그래머스
- 2020
- 2D Array
- 동적계획법
- lastIndex
- GREEDY
- Recursion
- dp
- Developer
- PriorityQueue
- heap
- dynamic programming
- Kotlin
- booleanarray
- Poll
- report
Archives
- Today
- Total
Code in
프로그래머스 힙 디스크 컨트롤러 with Kotlin 본문
프로그래머스 힙 부분 디스크 컨트롤러 문제입니다.
IntelliJ에서의 문제풀이입니다.
import java.util.PriorityQueue
// Kotlin은 JVM: Java Virtual Machine 을 사용하기 때문에 Java에서 import합니다.
val jobs: Array<IntArray> = arrayOf(intArrayOf(0, 3), intArrayOf(1, 9), intArrayOf(500, 6))
fun solution(jobs: Array<IntArray>): Int {
var answer = 0
var timer = 0 // 현재 시간
// 0은 요청 시간, 1은 소요 시간
val waitminHeap = PriorityQueue<IntArray>(compareBy({it[0]}, {it[1]}))
// wait 에서는 요청 시간을 기준으로, 요청 시간이 같은 건 소요 시간을 기준으로 ASC sorting
val workminHeap = PriorityQueue<IntArray>(compareBy({it[1]}, {it[0]}))
// work 에서는 소요 시간을 기준으로, 소요 시간이 같은 건 요청 시간을 기준으로 ASC sorting
jobs.forEach { waitminHeap.add(it) }
while (!waitminHeap.isEmpty() || !workminHeap.isEmpty()){
// wait, work 둘 중 하나라도 남은 데이터가 있다면 실행합니다.
while (!waitminHeap.isEmpty() && waitminHeap.peek()[0] <= timer){
// null pointer를 막아주고, wait의 요청 시간과 timer를 비교합니다.
workminHeap.add(waitminHeap.poll())
// 현재 시간인 timer보다 이르게 요청된 모든 wait을 work로 add합니다.
}// wait -> work
if (!workminHeap.isEmpty()){ // null pointer를 막습니다.
timer += workminHeap.peek()[1] // time skip합니다. work이 끝난 시간으로
answer += timer - workminHeap.peek()[0]
// work이 끝난 작업의 요청~종료 시간을 answer에 더합니다.
workminHeap.poll()
// work이 끝난 작업을 삭제합니다.
}else if (!waitminHeap.isEmpty()) // null pointer를 막습니다.
timer = waitminHeap.peek()[0] // time skip합니다. 가장 가까운 요청 시간으로
//println("$timer $answer") // : print할 때 int + " " + int를 쉽게 하는 방법입니다.
}
return answer/jobs.size // 평균이므로 나눠줍니다.
}
fun main() {
print(solution(jobs)) // 9
}
URL: https://programmers.co.kr/learn/courses/30/lessons/42627#
'알고리즘 스터디_문제풀이' 카테고리의 다른 글
프로그래머스 완전탐색 모의고사 with Kotlin (1) | 2020.08.13 |
---|---|
프로그래머스 힙 이중우선순위큐 with Kotlin (0) | 2020.08.12 |
프로그래머스 큐 프린터 with Kotlin (0) | 2020.08.11 |
프로그래머스 큐 다리를 지나는 트럭 with Kotlin (0) | 2020.08.11 |
프로그래머스 큐 기능개발 with Kotlin (0) | 2020.08.11 |
Comments