#유형 : 시뮬레이션, 문자열, HashMap

#난이도 : LV2

# 문자열 처리를 많이 해봤다면 쉽게 풀 수 있다고 생각한다. 

 

문제 그대로, 입력받는 명령어에 따라 String 문자열을 배열에 넣고 처리하면 된다.

변경되는 닉네임을 어떻게 처리할지 생각하던 중, userId를 기준으로 바뀌는 닉네임은 HashMap의 put 메소드를 사용하면 된다고 생각했다. 해당 메소드는 가장 늦게 들어온 키값을 기준으로 갱신하기 때문에 딱 알맞다고 생각한다. 더 좋은 방법도 물론 있을것이다.

 

문자열 처리를 많이 해봤다면 쉽게 풀 수 있다.

 

 

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
import java.util.*;
 
class Solution {
    public static String[] solution(String[] record) {
        
        String[] answer;
        
        ArrayList<String> arrList = new ArrayList<>();
        HashMap<StringString> historyMap = new HashMap<>();
        
        for(int i=0; i<record.length; i++){
            StringTokenizer st = new StringTokenizer(record[i]);
            
            String cmd = st.nextToken();
            String userId = st.nextToken();
            String userNickName="";
            
            if(!cmd.equals("Leave")) {
                    userNickName = st.nextToken();
            }
            
            if(cmd.equals("Enter")) {
                    arrList.add(userId + "님이 들어왔습니다.");
                    historyMap.put(userId, userNickName);
                    
            }
            else if(cmd.equals("Leave")) {
                    arrList.add(userId + "님이 나갔습니다.");
            }
            else {
                    historyMap.put(userId, userNickName);
            }
        }
        answer = new String[arrList.size()];
        
        for(int i=0; i<arrList.size(); i++) {
                String str = arrList.get(i);
                int idx = str.indexOf("님");
                String keyId = str.substring(0, idx);
                
                answer[i] = str.replace(keyId, historyMap.get(keyId));
            
            
        }
        
        
        return answer;
    }
}
cs

+ Recent posts