오픈 채팅방
Updated:
이 문제는 Enter나 Change를 통해 계속 닉네임이 바뀔수 있다는 것이다. 최종적인 닉네임으로 값을 출력해야 하므로, uid값을 키로 가지고, nickname을 value로 가지는 HashMap을 사용하였다.
- 최종적으로 uid가 어떤 닉네임인지를 구분한다(Enter,Change), 동시에 Change의 경우는 정답에 출력할필요가 없기때문에, Change의 경우는 전체 출력해야할 횟수에 더하지 않는다
- 그다음 루프를 돌면서, Enter와 Leave를 통해 정답을 채운다
By Java
import java.util.*;
class Solution {
public String[] solution (String[]record){
String[] answer = {};
Map<String, String> map = new HashMap<>();
int cnt = 0;
for (String value : record) {
String[] strArr = value.split(" ");
String menu = strArr[0], uid = strArr[1];
if (menu.equals("Enter")) {
String nickname = strArr[2];
if (map.get(uid) == null) {
map.put(uid, nickname);
} else {
map.remove(uid);
map.put(uid, nickname);
}
cnt++;
} else if (menu.equals("Change")) {
map.remove(uid);
map.put(uid, strArr[2]);
} else cnt++;
}
answer = new String[cnt];
int idx = 0;
for (String s : record) {
String[] arr = s.split(" ");
String menu = arr[0], uid = arr[1];
if (menu.equals("Enter")) {
String enterNickname = map.get(uid);
answer[idx++] = enterNickname + "님이 들어왔습니다.";
} else if (menu.equals("Leave")) {
String leaveNickname = map.get(uid);
answer[idx++] = leaveNickname + "님이 나갔습니다.";
}
}
return answer;
}
}
Leave a comment