-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path디스크 컨트롤러.swift
More file actions
51 lines (44 loc) · 1.38 KB
/
디스크 컨트롤러.swift
File metadata and controls
51 lines (44 loc) · 1.38 KB
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
//
// 디스크 컨트롤러.swift
//
//
// Created by chihoooon on 2022/02/10.
//
import Foundation
func customizedSort(_ arr: [[Int]]) -> [[Int]] {
return arr.sorted {
if $0[0] < $1[0] {
return true
}
else if $0[0] == $1[0] {
return $0[1] < $1[1]
}
return false
}
}
func solution(_ jobs: [[Int]]) -> Int {
var totalTime = 0
var currentTime = 0
var sortedJobs = customizedSort(jobs)
currentTime = sortedJobs[0][0]
while !sortedJobs.isEmpty {
var commingTasks = sortedJobs.filter { $0[0] <= currentTime + sortedJobs[0][1] }
currentTime += sortedJobs[0][1]
sortedJobs = sortedJobs.filter { !commingTasks.contains($0) }
if commingTasks.count < 1 {
currentTime = sortedJobs[0][0] + sortedJobs[0][1]
totalTime += currentTime - sortedJobs[0][0]
sortedJobs.removeFirst()
}
else {
currentTime = max(currentTime, commingTasks[0][0] + commingTasks[0][1])
totalTime += currentTime - commingTasks[0][0]
commingTasks.removeFirst()
if commingTasks.count > 0 {
commingTasks.sort { $0[1] < $1[1] }
sortedJobs = commingTasks + sortedJobs
}
}
}
return totalTime / jobs.count
}