PS/프로그래머스

[프로그래머스] 오픈채팅방

Hamp 2024. 9. 16. 12:36
반응형

문제

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

입력

record:[String] = ["동작 userId 닉네임"] // 공백으로 구분

출력

userId에 맞는 올바른 유저 닉네임의 동작을 순서대로 나열한다.


해석

1. 공백을 기준으로 정보를 나눈 후, userId를 key값으로 닉네임을 기억한다.

2. 이후 동작과 id를 매칭시킨  Info 구조체  를 만들어 주어진 명령어를 순서대로 기억한다.

3. 최종적으로 id를 닉네임으로 변환후 동작을 더해준다.

 

 

동작

  • Enter ~ 님이 들어왔습니다. , userId와 닉네임이 주어짐
  • Change , userId와 닉네임이 주어짐, 해당 userId의 닉네임을 교체한다.
  • Leave ~ 님이 나갔습니다. , userId가 주어짐 
import Foundation

struct Info { 
    let id: String 
    let command: String
}

func solution(_ record:[String]) -> [String] {
    
    var recordDict: [String: String] = [:]

    var infoList: [Info] = []
    
    func write(info: String) {
        
        let component = info.components(separatedBy: " ")
        let command = component[0]
        let id = component[1]
       
        if command == "Enter" || command == "Change"  {
             let nickName = component[2]
            recordDict[id] = nickName
            
            if command == "Enter" {
                 infoList.append(Info(id: id, command: "님이 들어왔습니다."))
            }
            
        } else {
             infoList.append(Info(id: id, command: "님이 나갔습니다."))
        } 
    }
    
    record.forEach { info in
          write(info: info)
    }
       
    return infoList.map({ recordDict[$0.id]! + $0.command  })
}
반응형