record
를 split() 하여 0번째 값이 각각 Enter
or Leave
일 때와 Enter
or Change
일 때 아래 로직을 수행한다.
Enter
or Leave
: orders
에 <첫 단어, ID> 를 추가Enter
or Change
: dic[ID] = 닉네임
업데이트orders
를 돌면서 answer
리스트에 첫 단어가 Enter
일 때는 "dic[유저 ID] (== 최종 닉네임)
님이 들어왔습니다.",
Leave
일 때는 "~~님이 나갔습니다." 를 리스트에 추가하여 반환한다.
record
를 split() 하고, 0번째 값이 각각 Enter
,Leave
,Change
일 때 아래 로직을 수행한다.
Enter
: map[ID] = 닉네임
업데이트, answer
리스트에 [ID] 들어왔습니다.
추가Leave
: answer
리스트에 [ID] 나갔습니다.
추가Change
: map[ID] = 닉네임
업데이트answer
를 돌면서 각 아이템을 split() 하여 map[<0번째 아이템>]님이 <1번째 아이템>
로 변환한 후 반환한다.
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
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()
}