-
카카오 기출_프로그래머스_오픈채팅방알고리즘/알고리즘 문제풀이 2021. 9. 14. 17:08
https://programmers.co.kr/learn/courses/30/lessons/42888
접근 방법
- record를 분리해서 id: nickName으로 변환
- record 순서대로 메세지 반환
정답코드
더보기import Foundation func solution(_ record:[String]) -> [String] { var idNickNamePair: [String:String] = [:] var queue: [String] = [] var sol: [String] = [] for info in record { let separated = info.components(separatedBy: " ") if idNickNamePair[separated[1]] == nil { idNickNamePair[separated[1]] = "" } switch (separated[0]) { case "Enter" : idNickNamePair[separated[1]] = separated[2] queue.append("Enter \(separated[1])") break case "Leave" : queue.append("Leave \(separated[1])") break case "Change" : idNickNamePair[separated[1]] = separated[2] break default: break } } for que in queue { let str = que.components(separatedBy: " ") if str[0] == "Enter" { sol.append("\(idNickNamePair[str[1]]!)님이 들어왔습니다.") } else { sol.append("\(idNickNamePair[str[1]]!)님이 나갔습니다.") } } return sol }
개선 코드
풀면서, 아쉬웠던 점이 있었는데, 고수의 코드를 슬쩍 보고 개선을 진행
코드가 짧아지긴했는데, 로직의 변경이 없어서 성능의 개선은 없었다.
장점으로는,
- idNickNamePair의 저장 방식을 깔끔하게 변경한 것,
- action을 지정함으로 실수를 줄일 수 있고, 구현에 있어서 하드코딩이 줄어든 것.
더보기import Foundation func solution(_ record:[String]) -> [String] { var idNickNamePair: [String:String] = [:] let action = ["Enter":"님이 들어왔습니다.", "Leave":"님이 나갔습니다."] for info in record { let separated = info.components(separatedBy: " ") if idNickNamePair[separated[1]] == nil { idNickNamePair[separated[1]] = "" } if separated[0] == "Leave" { continue } else { idNickNamePair[separated[1]] = separated[2] } } return record.filter({!$0.contains("Change")}) .map { let strArr = $0.components(separatedBy: " ") return idNickNamePair[strArr[1]]! + action[strArr[0]]! } }
'알고리즘 > 알고리즘 문제풀이' 카테고리의 다른 글
DFS/BFS_프로그래머스_여행경로 (0) 2021.11.18 DFS/BFS_프로그래머스_네트워크 (0) 2021.09.14 DP_LeetCode_house-robber (0) 2021.09.10 순열_LeetCode_permutation-in-string (0) 2021.09.08 이진트리_LeetCode_binary-search (0) 2021.09.02