Xcode/Swift - Algorithm
Swift ) 프로그래머스(Lv2) - 오픈 채팅방 (Hash)
후르륵짭짭
2020. 9. 8. 01:42
728x90
반응형
programmers.co.kr/learn/courses/30/lessons/42888
코딩테스트 연습 - 오픈채팅방
오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오
programmers.co.kr
안녕하세요 후르륵짭짭 입니다.
이번에돋 카카오 문제를 가져왔습니다.
그런데 카카오 문제치고는 쉽게 나온 것 같습니다.
단순하게 Hash를 사용 할 줄 아느냐를 물어보는 문제 였습니다.
** 저의 풀이 **
//0:23
func solution(_ record:[String]) -> [String] {
var dict : [String : String] = [:]
var stack : [(id : String , commend : String)] = []
for element in record {
let list = element.components(separatedBy: " ")
// print(list)
let commend = list[0]
let userid = list[1]
if commend == "Enter" || commend == "Leave"{
stack.append((userid, commend))
if commend == "Enter"{
let name = list[2]
if let _ = dict[userid] {
dict[userid] = name
}
else{
dict[userid] = name
}
}
}
else if commend == "Change" {
let name = list[2]
dict[userid] = name
}
}
var answer : [String] = []
for element in stack {
let name = dict[element.id]!
let commend = element.commend
if commend == "Enter"{
// let input = "\(name)님이 들어왔습니다."
answer.append("\(name)님이 들어왔습니다.")
}
else if commend == "Leave"{
answer.append("\(name)님이 나갔습니다.")
}
}
return answer
}
문제는 Hash에 값이 존재하냐? 존재하지 않냐가 중요한 것 같습니다.
이 문제를 보면 Enter와 Change 일 때만 입력이 세개 이고
Leave라면 입력이 두개 입니다.
그래서 그것에 대한 조건을 나눠줬습니다.
그리고 Dictionary로 중복 여부를 판단 했습니다.
for element in record {
let list = element.components(separatedBy: " ")
// print(list)
let commend = list[0]
let userid = list[1]
if commend == "Enter" || commend == "Leave"{
stack.append((userid, commend))
if commend == "Enter"{
let name = list[2]
if let _ = dict[userid] {
dict[userid] = name
}
else{
dict[userid] = name
}
}
}
else if commend == "Change" {
let name = list[2]
dict[userid] = name
}
}
그리고 마지막에 스택에 UserId와 명령을 저장하고
후에 Dictionary에서 이름을 가져오면 됩니다~!!
var answer : [String] = []
for element in stack {
let name = dict[element.id]!
let commend = element.commend
if commend == "Enter"{
// let input = "\(name)님이 들어왔습니다."
answer.append("\(name)님이 들어왔습니다.")
}
else if commend == "Leave"{
answer.append("\(name)님이 나갔습니다.")
}
}
728x90
반응형