코딩테스트(코틀린) 기초부터 연습

프로그래머스 오픈채팅방

리워크 2021. 4. 21. 20:49

내 풀이가 난잡해서  다른 사람의 코드를 봐봤음 일단 내코드는

class Solution {
    fun solution(record: Array<String>): Array<String> {
        val answer = mutableListOf<String>()
        val mutableMap = mutableMapOf<String,String>()
        val mutableListOfContext = mutableListOf<mention>()
        for (i in record){
            val splitStrings = i.split(" ")
            val uid = splitStrings[1]
            if(splitStrings.size>2){
              mutableMap.set(uid,splitStrings[2])
            }
            if(splitStrings[0]=="Enter"){
                val mention = mention(uid,"E")
                mutableListOfContext.add(mention)
            }else if (splitStrings[0]=="Leave"){
                val mention = mention(uid,"L")
                mutableListOfContext.add(mention)
            }
        }
        for (i in mutableListOfContext){
            val nick = mutableMap[i.uid]
            answer.add(i.message(nick!!))

        }
        return answer.toTypedArray()
    }
    class mention(var uid:String, var action:String){
        fun message(nickName: String): String {
            return when (action){
                "E"->{
                    "${nickName}님이 들어왔습니다."
                }else->{
                    "${nickName}님이 나갔습니다."
                }
            }
        }
    }
}

다른 사람의 코드를 보니까 

Sequence를 사용하는 이유를 알겠다.

class Solution {
    fun solution(record: Array<String>): Array<String> {
        val user = mutableMapOf<String, String>()

    return record
            .map {
                val r = it.split(" ")
                val action = r.first()
                when (action) {
                    "Enter", "Change" -> user += r[1] to r[2]
                }
                r
            }
            .asSequence()
            .filter { it[0] != "Change" }
            .map {
                val nickName = user[it[1]]
                val explanation = when (it[0]) {
                    "Enter" -> "님이 들어왔습니다."
                    "Leave" -> "님이 나갔습니다."
                    else -> throw IllegalArgumentException()
                }
                "$nickName$explanation"
            }
            .toList().toTypedArray()
    }
}

 

 

한수 배워 갑니다.