오픈채팅방

obtusa·2022년 5월 24일
0

이제부터는 문제가 너무 길면 생략해서 적으려고 한다.

문제의 핵심

  • 일종의 콘솔 관리자 창을 만드는 문제.
  • 닉네임은 변경 가능해야한다.
    • 나간 후, 새로운 닉네임을 만드는 방법
    • 채팅방 안에서 직접 닉네임 변경
  • 닉네임 규칙은 기존 오픈채팅방과 같이 나간 사람이 다시 들어올 때, 닉네임을 새롭게 변경하면 기존에 남아있는 닉네임 정보도 새로운 것으로 바뀐다.
  • 중복 닉네임을 허용한다.
  • record라는 문자열 배열이 제공되며 닉네임을 변경한 기록이 담겨있다.
  • return으로는 채팅방이 개설한 사람 입장에서 모든 변경과 행동이 처리된 후 보게 되는 메시지를 문자열 배열로 return 해야한다.

생각보다 간단하게 풀 수 있는 문제인거 같다.

import Foundation

func solution(_ record: [String]) -> [String] {
    var nickname: [String : String] = [:]
    var result: [String] = []
    let suffixs = ["님이 들어왔습니다.", "님이 나갔습니다."]
    for sentence in record{
        let temp = sentence.components(separatedBy: [" "])
        if temp[0] == "Enter" || temp[0] == "Change"{
            nickname[temp[1]] = temp[2]
        }
    }
    for sentence in record {
        let temp = sentence.components(separatedBy: [" "])
        if temp[0] == "Enter" {
            result.append(nickname[temp[1]]! + suffixs[0])
        } else if temp[0] == "Leave" {
            result.append(nickname[temp[1]]! + suffixs[1])
        }
    }
    return result
}

딕셔너리와 빈배열을 준비하고 상황에 맞는 문장들을 출력하기 위해 미리 준비해둔 문장들을 배열에 넣어 준비했다.

그 후, for문으로 들어오는 문자열을 분리하여 원하는 단어 (Enter, Change, Leave)가 있는지 확인 한 후 딕셔너리에 uid를 Key로 지정하고 Value로 닉네임을 할당했다.

그 다음으로 다시 한번 for문으로 record에서 말하는 순서로 미리 만들어놓은 문장들에 붙여 새로운 문자열 배열을 구성하였다. 이렇게 만들어진 문자열을 리턴하고 종료

문제를 풀고 보니 대다수의 사람들은 고급문법을 사용해 푼거 같던데.. 클로저를 능숙하게 다루는 수준에서 코테를 시작하는건가 싶다.

profile
특이한 것만 골라서 합니다

0개의 댓글