delpho
[level1] 2019 kakao blind recruitment 오픈채팅방 본문
문제 자체는 어렵지 않았는데 어떤 방식으로 풀어야할지 고민했던 문제!
어떤 자료구조를 써야할지 고민했는데, 결국 다른 블로그를 참고했다.
Map은 Key가 중복되서 put이 되면 마지막에 들어온 value가 저장되는 점을 활용했다.
여기서, key에 uid값을, value에는 닉네임을 저장한다!
LinkedList를 이용하여 일단은 채팅로그를 그대로 남긴다.
그 후, LinkedList의 값을 하나씩 빼서 "님"의 idx값을 알아낸 후 그 앞의 uid를 얻어온다.
얻어온 uid값을 활용하여 Map에 있는 닉네임을 얻어와 닉네임을 변경한 후, answer에 idx를 증가시키며 저장!
import java.util.*;
class Solution {
public String[] solution(String[] record) {
Map<String, String> nicknameMap = new HashMap<>();
List<String> chat = new LinkedList<>();
for(String info : record){
StringTokenizer st = new StringTokenizer(info);
String condition = st.nextToken();
String uid = st.nextToken();
String nickname = "";
if(st.hasMoreTokens()){
nickname = st.nextToken();
}
if(condition.equals("Enter")){
nicknameMap.put(uid, nickname);
chat.add(uid + "님이 들어왔습니다.");
}else if(condition.equals("Change")){
nicknameMap.put(uid, nickname);
}else{
chat.add(uid + "님이 나갔습니다.");
}
}
String[] answer = new String[chat.size()];
int idx = 0;
for(String c : chat){
int uidEndIdx = c.indexOf("님");
String uidTemp = c.substring(0, uidEndIdx);
String lastUid = nicknameMap.get(uidTemp);
if(lastUid != null){
answer[idx++] = c.replace(uidTemp, lastUid);
}else{
answer[idx++] = c;
}
}
return answer;
}
}
'알고리즘 > 구현' 카테고리의 다른 글
[Silver III] 숫자 야구 - 2503 (완전탐색, 거꾸로 접근하는 방식) (0) | 2023.02.01 |
---|---|
[C++, 10828] 스택 (0) | 2021.07.15 |