문제
https://school.programmers.co.kr/learn/courses/30/lessons/42888
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
우선 [유저id : 닉네임] 딕셔너리를 만들었다. record에서 Change가 나오면 result의 닉네임을 다시 바꿔줘야 하므로, 처음부터 변경된 닉네임으로 result를 만드는 게 효율적이기 때문이다. 그래서 최종본(?) 닉네임을 얻기 위해 딕셔너리를 구했다. record에서 Enter, Change가 나오면 유저 id의 닉네임을 할당하는 방식으로 진행했다.
그후 record에서 Enter, Leave에 대한 메세지를 record에 추가해주었는데, if문 대신 딕셔너리 타입을 이용하였다. 맨 처음엔 if문으로 분기 처리를 해주었는데, 딕셔너리 타입을 활용하니 훨씬 깔끔하고 효율적인 분기 처리가 되었다.
카카오 문제라 이 꽉 물고 들어갔는데, 생각보다 쉬운 문제였다.
코드
func solution(_ record:[String]) -> [String] {
let nicknameTable = getNicknameTable(from: record)
let messageTable = ["Enter":"님이 들어왔습니다.", "Leave":"님이 나갔습니다."]
var result = [String]()
for arr in record {
let data = arr.components(separatedBy: " ")
let status = data[0], id = data[1]
if status != "Change" {
result.append(nicknameTable[id]! + messageTable[status]!)
}
}
return result
}
func getNicknameTable(from record: [String]) -> [String:String] {
var board = [String:String]()
for arr in record {
let data = arr.components(separatedBy: " ")
let status = data[0], id = data[1]
if status == "Enter" || status == "Change" {
board[id] = data[2]
}
}
return board
}
'PS' 카테고리의 다른 글
[PS] 간단한 Graph 개념과 BFS, DFS 템플릿 (0) | 2023.02.20 |
---|---|
[Leetcode - Swift] 1091 Shortest Path in Binary Matrix (0) | 2023.02.18 |
[Leetcode - Swift] 111. Minimum Depth of Binary Tree (0) | 2023.02.01 |
[Leetcode - Swift] 94. Binary Tree Inorder Traversal (0) | 2023.02.01 |
[백준 - Swift] 19583 사이버 개강총회 (0) | 2023.01.24 |