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
}