본문 바로가기

알고리즘 풀이/프로그래머스

[프로그래머스] 오픈채팅방 / 2019 KAKAO BLIND RECRUITMENT - JAVA

🔗 문제 링크

[프로그래머스] 오픈채팅방 / 2019 KAKAO BLIND RECRUITMENT

 

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

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

programmers.co.kr

 

📝 풀이 과정

한 유저는 유저 아이디 하나와 닉네임을 여러 개 가질 수 있고, 제일 마지막으로 지정한 닉네임을 가져야한다. 때문에 유저 아이디를 Key로 가지면서 닉네임을 Value 값으로 갖는 Map을 만들어주었다.

 

반복문을 돌며 새로 들어오거나 닉네임을 변경할 때마다 Map에 put을 해주면 자동으로 값이 덮어씌워지기 때문에 별도의 처리를 하지않고 넣어주었다.
모든 닉네임 처리가 끝났으면 다시 한 번 반복문을 돌며 메시지를 리스트에 넣어주었다.

 

💻 코드

import java.util.*;
import java.util.stream.Collectors;

class Solution {
    public String[] solution(String[] record) {
        Map<String, String> map = new HashMap<>();
        List<String[]> splitRecord = Arrays.stream(record).map(r -> r.split(" ")).collect(Collectors.toList());

        for (String[] r : splitRecord) {
            if (r[0].equals("Enter") || r[0].equals("Change")) {
                map.put(r[1], r[2]);
            }
        }

        List<String> result = new ArrayList<>();

        for (String[] r : splitRecord) {
            switch (r[0]) {
                case "Enter":
                    result.add(String.format("%s님이 들어왔습니다.", map.get(r[1])));
                    break;
                case "Leave":
                    result.add(String.format("%s님이 나갔습니다.", map.get(r[1])));
                    break;
            }
        }
        return result.toArray(new String[0]);
    }
}