💡Problem Solving/Programmers

[프로그래머스] 오픈채팅방 (Java)

gom20 2021. 10. 22. 23:35

#문제

https://programmers.co.kr/learn/courses/30/lessons/42888

 

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

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

programmers.co.kr


#풀이

id, name 쌍을 가지는 HashMap을 이용하였다.

record를 순회하면서 id, name 쌍을 만들고 요청이 있을 경우 name을 업데이트 한다. 

name은 변경될 수 있으므로 name대신 id를 넣어서 문자열을 저장해둔다. 

순회가 끝난 후 문자열 내 id를 name으로 변경한다. 

 

#소스코드

import java.util.*;
class Solution {
    public String[] solution(String[] record) {
        String[] answer = {};
        HashMap<String, String> users = new HashMap<String, String>();
        
        StringBuilder sb = new StringBuilder();
        for(int i = 0; i < record.length; i++){
            String s = record[i];
            String[] arr = s.split(" ");
            switch(arr[0]){
                case "Enter":
                    sb.append(arr[1]).append("님이 들어왔습니다.-");
                    users.put(arr[1], arr[2]);
                    break;
                case "Leave": 
                    sb.append(arr[1]).append("님이 나갔습니다.-");
                    break;
                case "Change":
                    users.put(arr[1], arr[2]);
                    break;
            }
        }
        
        String str = sb.toString();
        String[] result = str.split("-");
        for(int i = 0; i < result.length; i++){
            String key = result[i].substring(0, result[i].indexOf("님"));
            result[i] = result[i].replace(key, users.get(key));
        }
  
        return result;
    }
     
}