import Foundation
func solution(_ record:[String]) -> [String] {
var orders: [String] = [] // 출입 명령어를 보관할 배열
var dic: [String: String] = [:] // 마지막 닉네임 명단
// 출입 명령어랑 닉네임 변경 명령어를 따로 보관한다.
for val in record {
let varArr = val.components(separatedBy: " ")
if varArr[0] == "Change" {
dic[varArr[1]] = varArr[2]
} else {
if varArr[0] == "Enter" {
dic[varArr[1]] = varArr[2]
}
orders.append(val)
}
}
let result = getResult(orders, list: dic)
return result
}
// orders - 출입 명령어를 보관하는 배열
// list - 마지막 닉네임 변경 명단
func getResult(_ orders: [String], list: [String: String]) -> [String] {
var output: [String] = []
for (index, val) in orders.enumerated() {
let varArr = val.components(separatedBy: " ")
var interpretedVal = ""
guard let changedNick = list[varArr[1]] else {
continue // 닉네임 명단에 없을리가 없기에 여기 탈일 없다.
}
interpretedVal += changedNick
if varArr[0] == "Enter" {
interpretedVal += "님이 들어왔습니다."
} else {
interpretedVal += "님이 나갔습니다."
}
output.append(interpretedVal)
}
return output
}
알고리즘 지식은 크게 필요없는 문제였다.
문자열 파싱하고 분리 그리고 딕셔너리만 잘 사용하면 무난한 문제
고차함수 이용하면 더 코드 짧게 만들 수 있을 듯