문제
입력
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 })
}
'PS > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 괄호 변환 (0) | 2024.09.17 |
---|---|
[프로그래머스] 문자열 압축 (1) | 2024.09.16 |
[프로그래머스] n진수 게임 (0) | 2024.09.15 |
[프로그래머스] 파일명 정렬 (0) | 2024.09.15 |
[프로그래머스] 압축 (0) | 2024.09.15 |