오픈 채팅방

Updated:

이 문제는 Enter나 Change를 통해 계속 닉네임이 바뀔수 있다는 것이다. 최종적인 닉네임으로 값을 출력해야 하므로, uid값을 키로 가지고, nickname을 value로 가지는 HashMap을 사용하였다.

  1. 최종적으로 uid가 어떤 닉네임인지를 구분한다(Enter,Change), 동시에 Change의 경우는 정답에 출력할필요가 없기때문에, Change의 경우는 전체 출력해야할 횟수에 더하지 않는다
  2. 그다음 루프를 돌면서, 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