본문 바로가기
Algorithm/Programmers

[2019 KAKAO BLIND RECRUITMENT] 오픈채팅방(JAVA)

by 원만사 2020. 9. 11.
반응형

 

코딩테스트 연습 - 오픈채팅방

오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오

programmers.co.kr

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;
 
public class 오픈채팅방 {
    public String[] solution(String[] record) {
        String[] answer = {};
        String[] log = new String[record.length]; // Enter, Leave를 담아두는 log 배열
 
        // <id, nickname>의 HashMap ex. <uid1234, Prodo>
        Map<StringString> id_nick = new HashMap<StringString>();
        // <index, uid>의 HashMap ex. <0, uid1234> -> 0번째는 uid1234 아이디를 가진 유저의 행동이 입력되어야 한다..
        Map<Integer, String> idx_ans = new HashMap<Integer, String>();
        StringTokenizer st;
        int idx = 0;
 
        for (String s : record) {
            st = new StringTokenizer(s);
            log[idx] = st.nextToken();
            String id = st.nextToken();
            String nickname = null;
            
            if(!log[idx].equals("Leave")) {
                nickname = st.nextToken();
                id_nick.put(id, nickname);
            }
            
            // 닉네임 변경의 경우는 id_nick 해쉬맵의 nickname 정보만 바꿔주고 log와 idx_ans에는 넣어주지 않는다.
            // idx를 증가시켜주지 않았기 때문에 다음 for문을 통해서 log배열에서 Change 정보가 사라진다. 
            if (log[idx].equals("Change"))
                continue;
 
            idx_ans.put(idx++, id);
        }
 
        answer = new String[idx];
 
        for (int i = 0; i < idx; i++) {
            String uid = idx_ans.get(i);
            String nickname = id_nick.get(uid);
            if (log[i].equals("Enter"))
                answer[i] = nickname + "님이 들어왔습니다.";
            else if(log[i].equals("Leave"))
                answer[i] = nickname + "님이 나갔습니다.";
        }
 
        return answer;
    }
 
}
 
cs
반응형

댓글