잡다한 배똥월드

728x90

 

코딩 테스트 풀이 체크리스트
2시간 내에 풀었는가? O
본인의 실력으로 풀었는가? O

 

 

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

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

programmers.co.kr

 

 

 

 

 

import java.util.*;

class Solution {
    public String[] solution(String[] record) {
        ArrayList<String> answer = new ArrayList<>();
        
        String[][] list = new String[record.length][2];
        HashMap<String, String> name = new HashMap<>();
        
        for (int i = 0; i < record.length; i++) {
            String[] re = record[i].split(" ");
            
            list[i][0] = re[0];
            list[i][1] = re[1];
            
            if (re[0].equals("Enter") || re[0].equals("Change")) {
                name.put(re[1], re[2]);
            } 
        }
        
        for (int i = 0; i < list.length; i++) {
            if (list[i][0].equals("Enter")) {
                answer.add(name.get(list[i][1]) + "님이 들어왔습니다.");
            } else if (list[i][0].equals("Leave")){
                answer.add(name.get(list[i][1]) + "님이 나갔습니다.");
            }
        }
        
        return answer.toArray(new String[answer.size()]);
    }
}

 

테스트 1 통과 (2.19ms, 73.3MB)
테스트 2 통과 (2.23ms, 75.2MB)
테스트 3 통과 (2.12ms, 76.2MB)
테스트 4 통과 (2.33ms, 76.4MB)
테스트 5 통과 (6.94ms, 75.8MB)
테스트 6 통과 (6.18ms, 88.1MB)
테스트 7 통과 (6.91ms, 77MB)
테스트 8 통과 (5.06ms, 81MB)
테스트 9 통과 (6.84ms, 82.6MB)
테스트 10 통과 (6.35ms, 79.8MB)
테스트 11 통과 (5.49ms, 90.7MB)
테스트 12 통과 (6.56ms, 78.2MB)
테스트 13 통과 (7.23ms, 78MB)
테스트 14 통과 (7.46ms, 86.1MB)
테스트 15 통과 (3.43ms, 86.7MB)
테스트 16 통과 (2.63ms, 79MB)
테스트 17 통과 (3.82ms, 82.9MB)
테스트 18 통과 (3.45ms, 81MB)
테스트 19 통과 (7.14ms, 85.4MB)
테스트 20 통과 (7.64ms, 85.2MB)
테스트 21 통과 (6.84ms, 78.4MB)
테스트 22 통과 (8.49ms, 74.9MB)
테스트 23 통과 (5.17ms, 79.8MB)
테스트 24 통과 (8.81ms, 87.9MB)
테스트 25 통과 (125.01ms, 169MB)
테스트 26 통과 (117.24ms, 160MB)
테스트 27 통과 (113.14ms, 162MB)
테스트 28 통과 (122.73ms, 178MB)
테스트 29 통과 (93.02ms, 175MB)
테스트 30 통과 (81.91ms, 168MB)
테스트 31 통과 (82.04ms, 162MB)
테스트 32 통과 (71.11ms, 164MB)

 

 

 

 

 

유저 ID는 그대로인데 이름은 변경할 수 있다.

그래서 for문으로 record를 순회할건데, 이 때 record[i]의 내용이 Enter이나 Change이면 이름을 변경될 수 있다.

그래서 유저ID에 맞게 이름을 넣기 위해서 해시맵을 사용하였고,

Enter이나 Change면 이름이 같든 다르든 그냥 변경하도록 했다.

 

 

 

 

 

그리고 나서 할 것이 들어왔다 나갔다 하는 문구를 적을 차례인데,

Enter면 들어왔다고, Leave면 나갔다고 문구를 적고 Change는 그냥 넘어가는 식으로 작성하였다.

 

 

 

 

더보기

처음 작성한 코드 : 

 

import java.util.*;

class Solution {
    public String[] solution(String[] record) {
        
        HashMap<String, String> name = new HashMap<>();
        ArrayList<String> data = new ArrayList<>();
        
        for (int i = 0; i < record.length; i++){
            String[] temp = record[i].split(" ");
            
            if (temp[0].equals("Leave")){
                data.add(record[i]);
                continue;
            }
            
            if (temp[0].equals("Enter")){
                data.add(record[i]);
                name.put(temp[1], temp[2]);
                continue;
            }
            
            if (temp[0].equals("Change")){
                name.put(temp[1], temp[2]);
            }
        }
        
        String[] answer = new String[data.size()];
        
        for (int i = 0; i < data.size(); i++){
            String[] temp = data.get(i).split(" ");
            
            String st = name.get(temp[1]);
            
            StringBuilder sb = new StringBuilder(st);
            
            if (temp[0].equals("Enter")){
                sb.append("님이 들어왔습니다.");
            } else if (temp[0].equals("Leave")){
                sb.append("님이 나갔습니다.");
            }
            
            answer[i] = sb.toString();
        }
        
        return answer;
    }
}

 

 

 

 

 

 

 

728x90

+ Recent posts