문제풀이/코딩테스트

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

gyungmean 2022. 5. 5. 01:14

문제출처

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

 

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

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

programmers.co.kr

import java.util.*;
class Solution {
    public String[] solution(String[] record) {
        List<String> answer_list = new ArrayList<>();
        HashMap<String, String> user = new HashMap<>();
        
        for(String r : record){
            String[] tmp = r.split(" ");
            switch(tmp[0]){
                    case "Enter":
                    user.put(tmp[1], tmp[2]);
                    break;
                    case "Change":
                    user.put(tmp[1], tmp[2]);
                    break;
            }
        }
        for(String r : record){
            String[] tmp = r.split(" ");

            switch(tmp[0]){
                    case "Enter":
                    answer_list.add(user.get(tmp[1]) + "님이 들어왔습니다.");
                    break;
                    case "Leave":
                    answer_list.add(user.get(tmp[1]) + "님이 나갔습니다.");
                    break;
        }
    }
        String[] answer = answer_list.toArray(String[] :: new);
        return answer;
    }
}

hashmap을 이용해서 풀었다.

 

카카오 기술 블로그에 있는 풀이방법은

enter, leave인 경우 유저 아이디와 함께 출력될 메세지 종류 저장

enter, change인 경우 아이디를 키로 닉네임을 값으로 저장

처음 기록해둔 메세지를 순회하며 두번째에 저장해둔 닉네임을 참조하여 완성.

 

내가 푼 것과 흐름은 비슷하다.

나는 그냥 처음에는 enter와 change인 경우만 찾으며 아이디와 닉네임을 먼저 저장했다.

후에 enter와 leave를 돌며 바로 메세지를 만들어 list에 추가했다.

 

더 좋고 빠른 방법이 있지 않을까 코드가 지저분하게 느껴지지만 우선 빠른시간내에 풀었으니 만족...