Lv2. 오픈채팅방

Hello·2022년 8월 8일
0

코딩테스트 연습 > 오픈채팅방

1. 풀이 설명

python

  1. record 를 split() 하여 0번째 값이 각각 Enter or Leave 일 때와 Enter or Change 일 때 아래 로직을 수행한다.

    • Enter or Leave : orders 에 <첫 단어, ID> 를 추가
    • Enter or Change : dic[ID] = 닉네임 업데이트
  2. orders를 돌면서 answer 리스트에 첫 단어가 Enter 일 때는 "dic[유저 ID] (== 최종 닉네임) 님이 들어왔습니다.",
    Leave 일 때는 "~~님이 나갔습니다." 를 리스트에 추가하여 반환한다.

kotlin

  1. record 를 split() 하고, 0번째 값이 각각 Enter,Leave,Change 일 때 아래 로직을 수행한다.

    • Enter : map[ID] = 닉네임 업데이트, answer 리스트에 [ID] 들어왔습니다. 추가
    • Leave : answer 리스트에 [ID] 나갔습니다. 추가
    • Change : map[ID] = 닉네임 업데이트
  2. answer를 돌면서 각 아이템을 split() 하여 map[<0번째 아이템>]님이 <1번째 아이템> 로 변환한 후 반환한다.

2. 나의 풀이

python

def solution(record):
    answer = []
    dic = {}
    orders = []

    for r in record:
        list = r.split()
        if list[0] == 'Enter' or list[0] == 'Leave':
            orders.append([list[0], list[1]])
        if list[0] == 'Enter' or list[0] == 'Change':
            dic[list[1]] = list[2]
            
    for order in orders:
        if order[0] == 'Enter':
            answer.append(dic[order[1]] + "님이 들어왔습니다.")
        else:
            answer.append(dic[order[1]] + "님이 나갔습니다.")
            
    return answer

kotlin

fun solution(record: Array<String>): Array<String> {
    val answer = mutableListOf<String>()
    val map = HashMap<String, String>() // <ID, 닉네임>
        
    record.forEach { r ->
        val input = r.split(" ")
        val id = input[1]
        when(input[0]) {
            "Enter" -> {
                map[id] = input[2]
                answer.add("$id 들어왔습니다.")
            }
            "Leave" -> answer.add("$id 나갔습니다.")
            "Change" -> map[id] = input[2]
        }
    }
        
    return answer.map { str ->
        "${map[str.split(" ")[0]]}님이 ${str.split(" ")[1]}"
    }.toTypedArray()
}
profile
안녕하세요 :)

0개의 댓글