프로그래머스

[프로그래머스][2019 KAKAO BLIND RECRUITMENT][Kotlin]오픈채팅방

끝까지 처음처럼 2022. 9. 26. 10:44
728x90
class Solution {
    fun solution(record: Array<String>): Array<String> {
        var answer = arrayOf<String>()
        val stat = mapOf<String,String>("Enter" to "님이 들어왔습니다.", "Leave" to "님이 나갔습니다.")
        var nameNick = mutableMapOf<String,String>()
        for(temp in record){
            if(temp.split(" ")[0] == "Leave") continue
            else nameNick.put(temp.split(" ")[1], temp.split(" ")[2])
        }
        
        for(temp in record){
            if(temp.split(" ")[0] == "Enter"){
                answer += nameNick.get(temp.split(" ")[1]) + stat.get("Enter")
            }
            if(temp.split(" ")[0] == "Leave"){
                answer += nameNick.get(temp.split(" ")[1]) + stat.get("Leave")
            } else continue

        }
        
        return answer
    }
}

저의 현재 실력으로 푼 문제 답안이며, 가장 좋은 코드는 아닐 수 있으며, 코틀린을 공부하면서 추가적으로 알게 된 개념이 있어 다시 풀 경우 추가적으로 코드를 작성 할 수 있도록 하겠습니다.

----------------------------------------------------------------------------------------------------------------------------------------------------------------

 

상기 코드를 좀 더 간단하게 작성한 코드입니다.

class Solution {
    fun solution(record: Array<String>): Array<String> {
        
        var nickName = hashMapOf<String,String>()
        var msg = hashMapOf<String,String>()
        msg.put("Enter","님이 들어왔습니다.")
        msg.put("Leave","님이 나갔습니다.")
        record.forEach{
            val split = it.split(" ")
            if(split.size == 3){
                nickName.put(split[1],split[2])
            }
        }
        var answer = arrayListOf<String>()
        for(rec in record){
            val split = rec.split(" ")
            if(msg.containsKey(split[0])){
                answer.add(nickName[split[1]] + msg[split[0]])
            }
        }

        return answer.toTypedArray()
    }
}

차이점으로는 전체적으로 조건을 많이 줄이며 split 함수를 최대한 적게 사용하도록 작성하였습니다.

그렇다 보니 하기를 확인해보시면 아시겠지만, 대체적으로 실행시간이 1/2 ~ 1/30 까지 줄어 든 것을 확인할 수 있었습니다.

 

 

처음에 작성하였었던 코드의 실행결과 입니다.

테스트 1 통과 (21.93ms, 63.9MB)
테스트 2 통과 (19.92ms, 64.3MB)
테스트 3 통과 (27.67ms, 63.9MB)
테스트 4 통과 (23.34ms, 64.2MB)
테스트 5 통과 (26.28ms, 67.9MB)
테스트 6 통과 (30.68ms, 67.5MB)
테스트 7 통과 (45.09ms, 66.3MB)
테스트 8 통과 (38.10ms, 67.2MB)
테스트 9 통과 (39.23ms, 68.6MB)
테스트 10 통과 (31.60ms, 68MB)
테스트 11 통과 (31.05ms, 66.8MB)
테스트 12 통과 (26.49ms, 67MB)
테스트 13 통과 (33.79ms, 67MB)
테스트 14 통과 (28.17ms, 73.3MB)
테스트 15 통과 (20.16ms, 65.5MB)
테스트 16 통과 (19.67ms, 64MB)
테스트 17 통과 (22.01ms, 64.3MB)
테스트 18 통과 (21.76ms, 65.6MB)
테스트 19 통과 (31.95ms, 68.4MB)
테스트 20 통과 (30.28ms, 66.5MB)
테스트 21 통과 (36.01ms, 66.6MB)
테스트 22 통과 (27.25ms, 67.3MB)
테스트 23 통과 (40.89ms, 67.2MB)
테스트 24 통과 (32.96ms, 67.9MB)
테스트 25 통과 (3053.98ms, 411MB)
테스트 26 통과 (3268.61ms, 426MB)
테스트 27 통과 (3577.78ms, 473MB)
테스트 28 통과 (3934.12ms, 604MB)
테스트 29 통과 (3965.10ms, 514MB)
테스트 30 통과 (2287.18ms, 495MB)
테스트 31 통과 (3269.56ms, 665MB)
테스트 32 통과 (3281.79ms, 681MB)

수정한  코드의 실행 결과 입니다.

테스트 1 통과 (11.87ms, 61.5MB)
테스트 2 통과 (12.55ms, 60.6MB)
테스트 3 통과 (10.27ms, 60.6MB)
테스트 4 통과 (17.70ms, 60.5MB)
테스트 5 통과 (36.52ms, 60.7MB)
테스트 6 통과 (54.25ms, 61.9MB)
테스트 7 통과 (31.95ms, 61.6MB)
테스트 8 통과 (25.21ms, 62.1MB)
테스트 9 통과 (39.33ms, 61.6MB)
테스트 10 통과 (22.67ms, 62.5MB)
테스트 11 통과 (19.82ms, 60.6MB)
테스트 12 통과 (22.65ms, 61.1MB)
테스트 13 통과 (31.80ms, 61.6MB)
테스트 14 통과 (32.55ms, 60.5MB)
테스트 15 통과 (17.23ms, 58.7MB)
테스트 16 통과 (9.52ms, 61.8MB)
테스트 17 통과 (18.41ms, 59MB)
테스트 18 통과 (15.51ms, 60.5MB)
테스트 19 통과 (12.29ms, 62.9MB)
테스트 20 통과 (16.91ms, 62.2MB)
테스트 21 통과 (17.16ms, 62.9MB)
테스트 22 통과 (12.73ms, 62.8MB)
테스트 23 통과 (20.98ms, 60.6MB)
테스트 24 통과 (17.81ms, 62.3MB)
테스트 25 통과 (118.17ms, 127MB)
테스트 26 통과 (128.05ms, 131MB)
테스트 27 통과 (197.56ms, 146MB)
테스트 28 통과 (154.66ms, 141MB)
테스트 29 통과 (117.89ms, 144MB)
테스트 30 통과 (130.07ms, 133MB)
테스트 31 통과 (120.04ms, 135MB)
테스트 32 통과 (101.62ms, 139MB)