오픈 채팅방
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