developerU

[프로그래머스] level2 오픈채팅방 (java) 본문

Algorithm/Programmers

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

developerU 2022. 5. 4. 02:25

문제링크

 

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

 

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

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

programmers.co.kr

 

풀이 방법

1. 맵으로 [유저 아이디]와 [닉네임]을 관리

   맵에 같은 아이디가 있다면 마지막에 들어온 닉네임이 최종 닉네임으로 결정

2. Queue에 아이디와 Enter, Leave 정보 저장

   이 부분을 리스트로 하고 바로 get을 하면서 순서대로 answer 배열에 담아주는 것도 좋은 방법일 것 같다.

 

내 코드

import java.util.*;

class Solution {
    public String[] solution(String[] record) {
        String[] answer = {};
        List<String> list = new ArrayList<>();
        Map<String, String> id = new HashMap<>();
        Queue<String[]> queue = new LinkedList<>();
        
        StringTokenizer st;
        for(int i=0; i<record.length; i++){
            String[] temp = record[i].split(" ");
            String status = null;
            switch(temp[0]){
                case "Enter":
                    status = "들어왔습니다.";
                    break;
                case "Leave":
                    status = "나갔습니다.";
                    break;
            }
            if(status != null)
                queue.offer(new String[]{temp[1], status});
            if(temp.length > 2)
                id.put(temp[1], temp[2]);
        }
        
        while(!queue.isEmpty()){
            String[] res = queue.poll();
            String s = id.get(res[0]) + "님이 " + res[1];
            list.add(s);
        }
        
        answer = new String[list.size()];
        answer = list.toArray(answer);
        
        return answer;
    }
}
Comments