1 minute read



문제 풀이


이 문제는 HashMap을 활용하면 풀 수 있는 간단한 문제이다.


아이디어 도출

문제를 살펴보면, 출력해야하는 채팅방 관리 기록은 사용자마다 가장 최신의 닉네임을 반영하고 있다. 여기서 바로 HashMap을 활용해 사용자마다 최신의 닉네임을 갱신해두면 된다는 것을 알 수 있다.

사용자마다 갱신한 닉네임을 구한다면 입장하는 Enter, 퇴장하는 Leave 마다 해당 닉네임으로 기록을 남기면 된다.

그래서 결국 닉네임을 갱신하는 순회와 기록을 남기는 순회까지 총 O(2N)의 시간복잡도를 가지도록 구현하면 된다.


  • record 배열을 순회하며, Enter일 경우, HashMap에 사용자를 key로, 닉네임을 value로 삽입한다.
  • Change일 경우, HashMap에 사용자를 key로, 닉네임을 value로 삽입하여 사용자의 닉네임을 갱신한다.
  • 다시 record 배열을 순회하며 Enter일 경우 hashMap의 닉네임으로 입장 기록을 남기고, Leave일 경우 hashMap의 닉네임으로 퇴장 기록을 남긴다.


문제 풀이를 위해 작성한 코드는 아래와 같다.



작성 코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import java.util.*;

class Solution {

    public String[] solution(String[] record) {
        
        HashMap<String, String> userMap = new HashMap<>();

        for(String input : record) {
            String[] split = input.split(" ");
            if(split[0].equals("Enter")) {
                userMap.put(split[1], split[2]);
            }
            else if(split[0].equals("Change")) {
                userMap.put(split[1], split[2]);
            }
        }
        
        ArrayList<String> result = new ArrayList<>();

        for(String input : record) {
            String[] split = input.split(" ");
            if(split[0].equals("Enter")) {
                result.add(userMap.get(split[1]) + "님이 들어왔습니다.");
            }
            else if(split[0].equals("Leave")) {
                result.add(userMap.get(split[1]) + "님이 나갔습니다.");
            }
            
        }

        String[] answer = new String[result.size()];
        for(int i=0; i<result.size(); i++) {
            answer[i] = result.get(i);
        }

        return answer;
        
    }
    
    public static void main(String[] args) {
        Solution sol = new Solution();
        
        String[] record = new String[]{"Enter uid1234 Muzi",
                                       "Enter uid4567 Prodo",
                                       "Leave uid1234",
                                       "Enter uid1234 Prodo",
                                       "Change uid4567 Ryan"};

        sol.solution(record);
    }

}

회고



출처

- —

  • 해당 문제의 저작권은 문제를 만든이에게 있으며 자세한 내용은 문제 링크에서 참조바랍니다.