본문 바로가기

Algorithm/Programmers

[2019 KAKAO BLIND RECRUITMENT][Map 활용] 오픈채팅방 - Java

문제 바로가기

 

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

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

programmers.co.kr

 

2019 카카오 블라인드 채용 코딩 테스트 문제를 시작해봅시다.

1번 문제인가봅니다. 깔끔하게 10분컷!

import java.util.*;

class Solution {
    public static String[] solution(String[] record) {
        StringTokenizer st;
        Map<String, String> uidList = new HashMap<>();
        List<String[]> chatList = new ArrayList<>();

        for(int i = 0; i < record.length; i++) {
            String uid = null, nickname = null;
            st = new StringTokenizer(record[i], " ");
            switch(st.nextToken()) {
            case "Enter":
                uid = st.nextToken();
                nickname = st.nextToken();
                uidList.put(uid, nickname);
                String[] enterMsg = {uid, "님이 들어왔습니다."};
                chatList.add(enterMsg);
                break;
            case "Leave":
                uid = st.nextToken();
                String[] leaveMsg = {uid, "님이 나갔습니다."};
                chatList.add(leaveMsg);
                break;
            case "Change":
                uid = st.nextToken();
                nickname = st.nextToken();
                uidList.replace(uid, nickname);
                break;
            }
        }

        String[] answer = new String[chatList.size()];
        for(int i = 0; i < answer.length; i++) {
            answer[i] = uidList.get(chatList.get(i)[0]) + chatList.get(i)[1];
        }

        return answer;
    }
}

문제를 보면

 

모든 유저는 [유저 아이디]로 구분한다.

란 말이 있습니다. 

 

보자마자 묻지도 따지지도 않고 Map으로 표현하면 되겠구나 생각했습니다. 

 

record에 있는대로 다 갱신해주고 나서 닉네임을 확정하되, 들어오고 나갈 때마다 로그가 남기 때문에 로그에 대한 정보를 문자열 배열({uid, "뭐시기저시기"}) 리스트로 넣어놓았습니다.

그리고 닉네임을 변경하는 경우 Map을 갱신해주면 됩니다.

 

마지막에 answer 배열에 넣을 때 Map에서 uid를 키로 갖고 있는 값 + "뭐시기저시기" 를 넣어주면 끝!!

 

 

이번주 코테전까지 19년껀 다 풀어봐야게씀니다...!!