1
+ import java.util.LinkedList
2
+
3
+ class Solution {
4
+
5
+ val recordsArr = Array (10000 ) { LinkedList <String >() }
6
+ val feeArr = Array (10000 ) { 0 }
7
+
8
+ data class Time (var hour : Int , var min : Int ) {
9
+
10
+ constructor (hourAndMin: List <Int >) : this (hourAndMin[0 ], hourAndMin[1 ]) {
11
+ this .hour = hourAndMin[0 ]
12
+ this .min = hourAndMin[1 ]
13
+ }
14
+
15
+ companion object {
16
+ fun calcUsingTime (inTime : Time , outTime : Time ): Int {
17
+ return (outTime.hour * 60 + outTime.min - inTime.hour * 60 - inTime.min)
18
+ }
19
+ }
20
+ }
21
+
22
+ fun String.timeSplit () = split(" :" ).map { it.toInt() }
23
+
24
+ fun solution (fees : IntArray , records : Array <String >): IntArray {
25
+ var answer: IntArray = intArrayOf()
26
+
27
+ for (i in records) {
28
+ val (time, num, inout) = i.split(" " )
29
+ if (inout == " IN" ) {
30
+ recordsArr[num.toInt()].add(time)
31
+ } else {
32
+ // out이 나올경우에는 바로 해당번호에 대해 처리를 해준다.
33
+ val inTime = Time ((recordsArr[num.toInt()].removeLast().timeSplit()))
34
+ val outTime = Time (time.timeSplit())
35
+
36
+ val usingTime = Time .calcUsingTime(inTime, outTime)
37
+ feeArr[num.toInt()] + = usingTime
38
+ }
39
+ }
40
+
41
+ for (i in 0 until 10000 ) {
42
+ while (recordsArr[i].isNotEmpty()) {
43
+ val now = Time (recordsArr[i].removeFirst().timeSplit())
44
+ val usingTime = Time .calcUsingTime(Time (23 , 59 ), now)
45
+ feeArr[i] + = usingTime
46
+ }
47
+ }// In은 했는데 Out은 안한경우 위에서 처리가 안되므로 처음부터 돌면서 23:59에서 빼준다.
48
+
49
+
50
+ // 요금 계산하기
51
+ val arr = mutableListOf<Int >()
52
+ for (i in 0 until 10000 ) {
53
+
54
+ if (feeArr[i] == 0 ) {
55
+ continue
56
+ } else {
57
+
58
+ if (feeArr[i] <= fees[0 ]) {
59
+ arr.add(fees[1 ])
60
+ // 기본요금 부과
61
+ } else {
62
+ val ceilCheck = (feeArr[i] - fees[0 ]) % fees[2 ] != 0 //
63
+ // 올림하라했으므로 올림해야하는지 check해주기
64
+
65
+ var remain = if (ceilCheck) {
66
+ (feeArr[i] - fees[0 ]) / fees[2 ] + 1
67
+ } else {
68
+ (feeArr[i] - fees[0 ]) / fees[2 ]
69
+ }
70
+
71
+
72
+ arr.add(fees[1 ] + remain * fees[3 ])
73
+
74
+ }
75
+ }
76
+
77
+ }
78
+ answer = arr.toIntArray()
79
+
80
+
81
+ return answer
82
+ }
83
+
84
+
85
+ }
0 commit comments