프로그래머스
[프로그래머스][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) |