PS/문제 풀이
[프로그래머스/Swift] 42888번 - 오픈채팅방
시르베어
2025. 2. 12. 09:57
문제
풀이
- 유저 정보를 담는 Dictionary 배열 하나, 출입기록을 담는 Dictionary 하나를 생성했다
- 닉네임을 기록하는 곳은 Enter와 Change인데 여기서 따로 기존에 있던 id인지는 구별할 필요가 없다 최종적으로 출입기록에서 id를 가져와 user에서 닉네임을 빼올것이기 때문
- 닉네임을 저장 해주고, 해당 출입의 종류만 enter에 저장해주면 된다
전체 코드
import Foundation
func solution(_ record:[String]) -> [String] {
var user: [String: String] = [:] // 유저정보, id에 따른 닉네임
var chatLogs: [(id: String, enter: Bool)] = [] //현재까지의 출입 기록
var result: [String] = []
for logs in record {
// [0]: 기능, [1]: id, [2]: 닉네임
let log: [String] = logs.components(separatedBy: " ")
if log[0] == "Enter" {
chatLogs.append((id: log[1], true))
user[log[1]] = log[2] // 닉네임 저장
}
else if log[0] == "Leave" {
chatLogs.append((id: log[1], false))
}
else {
user[log[1]] = log[2] // 닉네임 저장
}
}
for chatLog in chatLogs {
let nickname: String = user[chatLog.id]!
let str: String = nickname + (chatLog.enter ? "님이 들어왔습니다." : "님이 나갔습니다.")
// print(str)
result.append(str)
}
return result
}