[프로그래머스] 오픈채팅방 (JAVA/자바) - 2019 카카오 기출

·2021년 9월 3일
1

Algorithm

목록 보기
49/60

문제

프로그래머스>코딩테스트 연습>2019 KAKAO BLIND RECRUITMENT>오픈채팅방


풀이

채팅방에서 닉네임을 변경하는 방법은 다음과 같이 두 가지이다.

1. 채팅방을 나간 후, 새로운 닉네임으로 다시 들어간다.
2. 채팅방에서 닉네임을 변경한다.

그러므로 이름이 변경될 수 있는 경우는 두가지 경우(Enter, Change)이다. 유저가 나갔다 다시 들어오더라도 UID는 동일하기 때문에 이전에 출입했던 기록의 name 또한 변경되어야 한다.

Map 자료구조를 활용해서 UID - name 값을 저장한다. 이미 들어온 유저가 나갔다 다시 들어오거나(Enter) 이름을 변경하면(Change) 이미 있던 key-value 데이터가 덮어쓰기 된다.

최종적으로, 저장해놓은 map 데이터를 통해 UID로 name값을 가져온 후 Enter, Leave 경우의 안내 메세지를 리턴하면 된다.


코드

import java.util.ArrayList;
import java.util.HashMap;

class Solution {
    public static String[] solution(String[] record) {

        int n = record.length;

        HashMap<String, String> map = new HashMap<>(); // UID, Name

        for (int i = 0; i < n; i++) {
           String[] record_split = record[i].split(" ");

            if(record_split[0].charAt(0)=='E' || record_split[0].charAt(0)=='C'){
                map.put(record_split[1], record_split[2]); // 이미 map에 존재했다면 덮어쓰기 됨
            }
        }

        ArrayList<String> arr = new ArrayList<>();
        for (int i = 0; i < n; i++) {
            String[] record_split = record[i].split(" ");
            char type = record_split[0].charAt(0);
            
            // UID로 name을 get
            // enter과 leave만 출력해줌
            switch (type){
                case 'E':
                    arr.add(map.get(record_split[1]) + "님이 들어왔습니다.");
                    break;
                case 'L':
                    arr.add(map.get(record_split[1]) + "님이 나갔습니다.");
                    break;
            }
        }

        // answer 만들기
        String[] answer = new String[arr.size()];
        for (int i=0; i<arr.size(); i++) {
            answer[i] = arr.get(i);
        }

        return answer;
    }
}

정리

난이도 : LEVEL 2

🤦‍♀️ 메모

  • map을 생각 못하고 처음에 set으로 중복을 확인해주면 되지않을까? 라고 생각해서 싹 지우고 다시 풀었던 문제. 문제 풀기 전에 꼭 생각을 잘해보자!

참고 사이트

딱히 없음

profile
당근먹고 자라나는 개발자

0개의 댓글