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 })
}반응형