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