카테고리 없음

[프로그래머스][Kotlin] 호텔 대실

끝까지 처음처럼 2023. 2. 4. 23:39
728x90
class Solution {
    fun solution(book_time: Array<Array<String>>): Int {
        var answer: Int = 0
        var check = mutableListOf<MutableList<Int>>()
        val timeSort = book_time.toList().sortedBy{it.first()}
        timeSort.forEach{
            val start = it.first().split(":")[0].toInt()*60 + it.first().split(":")[1].toInt()
            val end = it.last().split(":")[0].toInt()*60 + it.last().split(":")[1].toInt() + 10
            val team = mutableListOf(start,end)
            if(check.isEmpty()){
                check.add(team)
            } else {
                var addCheck = true
                for(i in 0 .. check.size-1){
                    if(check[i].last() <= start){
                        addCheck = false
                        check[i].add(end)
                        break
                    }
                }
                if(addCheck){
                    check.add(team)
                }
            }
        }
        answer = check.size
        return answer
    }
}

해당문제는 입력받은 book_time 내 시간을 분단위로 만든 뒤 정렬 후 계산하는 방식으로 풀면 될 것 같다는 생각이 문제를보자마자 떠올라 작성하였습니다. 그렇게 빠르게 작성 후 모든 케이스를 통과하고 보니 작성한 코드 내 check를 mutableListOf<ArrayDeque>() 로 선언후 풀면 통과 시간이 더 빨라 질 것 같은 생각이 들어 한번 더 작성해보왔습니다.

 

import java.util.ArrayDeque
class Solution {
    fun solution(book_time: Array<Array<String>>): Int {
        var answer: Int = 0
        var check = mutableListOf<ArrayDeque<Int>>()
        val timeSort = book_time.toList().sortedBy{it.first()}
        timeSort.forEach{
            val start = it.first().split(":")[0].toInt()*60 + it.first().split(":")[1].toInt()
            val end = it.last().split(":")[0].toInt()*60 + it.last().split(":")[1].toInt() + 10
            var team = ArrayDeque<Int>()
            team.add(start)
            team.addLast(end)
            if(check.isEmpty()){
                check.add(team)
            } else {
                var addCheck = true
                for(i in 0 .. check.size-1){
                    if(check[i].peekLast() <= start){
                        addCheck = false
                        check[i].addLast(end)
                        break
                    }
                }
                if(addCheck){
                    check.add(team)
                }
            }
        }
        answer = check.size
        return answer
    }
}

큰틀을 바꾸지 않고 작게만 바꿔서 그런 것 일수도 있지만 눈에 띄는 차이는 없었음을 확인할 수 있었습니다.

 

추후 공부하여 알게된 개념이나 실력이 늘었을 경우 다시 작성할 수 있도록 하겠습니다.

 

리스트

테스트 1 통과 (33.16ms, 65.4MB)
테스트 2 통과 (37.17ms, 65.6MB)
테스트 3 통과 (41.54ms, 67.6MB)
테스트 4 통과 (39.03ms, 67.6MB)
테스트 5 통과 (34.21ms, 64.9MB)
테스트 6 통과 (56.52ms, 67.4MB)
테스트 7 통과 (51.09ms, 68.2MB)
테스트 8 통과 (35.26ms, 66.5MB)
테스트 9 통과 (35.06ms, 65.3MB)
테스트 10 통과 (47.04ms, 68MB)
테스트 11 통과 (50.80ms, 74.3MB)
테스트 12 통과 (61.81ms, 73.4MB)
테스트 13 통과 (30.82ms, 65.4MB)
테스트 14 통과 (40.51ms, 67.4MB)
테스트 15 통과 (44.87ms, 67MB)
테스트 16 통과 (34.80ms, 67.7MB)
테스트 17 통과 (46.87ms, 73.3MB)
테스트 18 통과 (37.86ms, 67.6MB)
테스트 19 통과 (52.90ms, 73.7MB)

Deque

테스트 1 통과 (41.65ms, 64.6MB)
테스트 2 통과 (40.74ms, 65MB)
테스트 3 통과 (47.80ms, 67.3MB)
테스트 4 통과 (58.60ms, 67.9MB)
테스트 5 통과 (28.51ms, 64.3MB)
테스트 6 통과 (46.91ms, 66.6MB)
테스트 7 통과 (49.68ms, 66.6MB)
테스트 8 통과 (37.26ms, 68MB)
테스트 9 통과 (50.41ms, 65.5MB)
테스트 10 통과 (41.80ms, 67.1MB)
테스트 11 통과 (50.49ms, 73.6MB)
테스트 12 통과 (73.76ms, 72.5MB)
테스트 13 통과 (32.60ms, 65.9MB)
테스트 14 통과 (48.01ms, 65.8MB)
테스트 15 통과 (47.45ms, 73.4MB)
테스트 16 통과 (33.41ms, 66.8MB)
테스트 17 통과 (50.76ms, 73MB)
테스트 18 통과 (48.55ms, 67.4MB)
테스트 19 통과 (60.46ms, 73.3MB)