안녕하세요 코코종입니다! 다시 알고리즘 스터디를 시작했답니다! (신입도 경력도 피할 수 없서...)
코딩테스트 연습 - 오픈채팅방
오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오
programmers.co.kr
문제에 대한 설명은 링크에서 참조하도록 하고 일단 제가 푼 코드를 보시죠!
import Foundation
enum Commands: String{
case Enter
case Leave
case Change
}
func solution(_ record:[String]) -> [String] {
var dict: [String : String] = [:]
var result: [String] = []
for rec in record {
var splited = rec.components(separatedBy: " ")
// print(splited) // command, uid, name
var command = splited[0]
var uid = splited[1]
var name = ""
if splited.count>2 {
name = splited[2]
} else {
name = dict["\(uid)"]!
}
switch command {
case Commands.Enter.rawValue:
result.append("\(uid)님이 들어왔습니다.")
dict[uid] = name
case Commands.Leave.rawValue:
result.append("\(uid)님이 나갔습니다.")
case Commands.Change.rawValue:
dict[uid] = name
default:
print("error")
}
// print(result)
}
var newResult: [String] = []
result.forEach {
var before = $0.components(separatedBy: "님") // uid, ~~습니다.
newResult.append("\(dict[before[0]]!)님\(before[1])")
}
return newResult
}
간단하게 설명은 하자면
[uid : name]을 dictionary 형태로 만들고 name이 변경된다면 dictionary 업데이트 해주는 겁니다. 처음에 들어온 채팅 로그를 result에 uid를 기준으로 구성해줍니다. 모든 변경 사항을 확인 한 후 로그의 내용을 dictionary의 uid에 맞게 name으로 바꿔 주면 끝!!
어때요 참 쉽죠? (사실 어려웠습니다...)
그런데 제출을 하고나서 생각해보니 result와 newResult로 2번이나 메모리를 차지하게 되어서 좀 비효율적이라고 생각했는데요(물론 머리로 날아가는 비둘기도 기능 구현은 성공한거지만...^^) 그래서 뇌내 코딩으로는 dictionary의 작업만 먼저 해주고 추후에 for문을 돌며 채팅 로그를 찍어도 되겠다고 생각을 했는데요. 다른 스터디원분들은 그렇게 푸셨더라구여 ㅎㅎ 생각이라도 한거에 만족합니다!
아쉬운 점은
앞서 말한 점과 굳이 열거형을 사용해서 코드가 더 길어진 것과 components 보다 split이 더 빠르다고 하는데 substring을 잘 다룰 줄 몰라서 일단 components를 사용한 점 입니다. 또한 for문을 고차함수를 활용해서 사용하는 법을 조금 더 익히면 좋겠다고 생각합니다.(그래도 마지막에는 forEach를 썼네요 ㅎㅎ)
앞으로도 1일 1알고리즘을 할 예정이므로 열심히 써보겠습니다! swift로 된 자료가 많이 없더라구요!(왜 인지는 알 것 같지만서도..ㅎㅎ...)
그럼 저는 내일 또 문제풀이로 돌아오겠습니다~
'알고리즘' 카테고리의 다른 글
[Swift 알고리즘] 백준 6198 - 옥상 정원 꾸미기 (0) | 2022.03.27 |
---|---|
[Swift 알고리즘] 프로그래머스 lv3 - 입국심사 (0) | 2022.03.20 |
[Swift 알고리즘] 프로그래머스 lv2 - k진수에서 소수 갯수 구하기 (0) | 2022.03.16 |
[Swift 알고리즘] 프로그래머스 lv2 - 주차 요금 계산 (0) | 2022.03.15 |
[Swift 알고리즘] 프로그래머스 lv1 - 신고 결과 받기 (0) | 2022.03.15 |