코딩테스트(코틀린) 기초부터 연습
프로그래머스 오픈채팅방
리워크
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()
}
}
한수 배워 갑니다.