Programming Language/Swift
[프로그래머스][Lv. 2] 오픈채팅방 Swift 풀이
myungsup1250
2022. 4. 9. 00:58
https://programmers.co.kr/learn/courses/30/lessons/42888
코딩테스트 연습 - 오픈채팅방
오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오
programmers.co.kr
풀이
2019 KAKAO BLIND RECRUITMENT 코딩테스트에 나온 문제.
Change, Enter, Leave 라는 3가지 이벤트를 처리하는 간단한 구현 문제이다.
먼저, Enter와 Leave의 경우에 "~님이 들어왔습니다." 그리고 "~님이 나갔습니다." 만 logs 문자열 배열에 저장하고, idLogs라는 문자열 배열에 아이디를 추가해둔다.
* logs와 idLogs는 같은 순서, 같은 크기로 저장한다. 나중에 그대로 붙여서 결과로 내보낼 예정이다.
그리고 사용자 아이디와 닉네임은 따로 관리한다.
추후에 Change로 바뀔 가능성이 있으므로 id:nickname 형태로 userName 딕셔너리를 사용하여 저장한다.
그리고 Change 일 경우에는 이미 사용자에 대한 정보가 있으므로 userName 딕셔너리에 저장된 값을 update만 해준다.
모든 record를 다 순회하였으면 마지막에 for loop를 활용하여
logs[i] = userName[idLogs[i]]! + logs[i] 형태로 닉네임을 logs 문자열 배열에 저장하여 간단하게 끝낸다.
끝!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
import Foundation
func solution(_ record:[String]) -> [String] {
var logs: [String] = [String]()
var idLogs: [String] = [String]()
var userName: [String:String] = [String:String]()
for rcd in record {
let slice: [String] = rcd.split(separator: " ").map { String($0) }
if slice[0] == "Change" {
userName.updateValue(slice[2], forKey: slice[1])
} else {
idLogs.append(slice[1])
if slice[0] == "Enter" {
userName.updateValue(slice[2], forKey: slice[1])
logs.append("님이 들어왔습니다.")
} else if slice[0] == "Leave" {
logs.append("님이 나갔습니다.")
}
}
}
for i in 0..<idLogs.count {
logs[i] = userName[idLogs[i]]! + logs[i]
}
return logs
}
|
cs |