대충이라도 하자

프로그래머스 - 오픈채팅방 (2019 KAKAO BLIND RECUITMENT) 본문

꼬꼬마 개발자 노트/Coding Problems

프로그래머스 - 오픈채팅방 (2019 KAKAO BLIND RECUITMENT)

Sueeeeee
반응형

1. 처음에는 구현에만 집중했다. 그러다보니 비슷한 구조의 for문이 2개가 탄생...

import java.util.*;

class Solution {
    public String[] solution(String[] record) {
        ArrayList<String> answers = new ArrayList<>();
        HashMap <String, String> map = new HashMap<>();
        
        for(String str : record) {
            String [] arr = str.split(" ");
            switch(arr[0]) {
                case "Enter": 
                    map.put(arr[1], arr[2]);
                    break;
                case "Change" : 
                    map.put(arr[1], arr[2]);
                    break;
                default :
                    break;
            }
        }
        
        for(String str :record) {
            String [] arr = str.split(" ");
            String result = "";
            switch(arr[0]) {
                case "Enter": 
                    answers.add(map.get(arr[1]) +"님이 들어왔습니다.");
                    break;
                case "Leave" :
                    answers.add(map.get(arr[1]) +"님이 나갔습니다.");
                    break;
                default :
                    break;
            }
        }
        
        String [] answer = new String[answers.size()];
        for(int i = 0; i<answers.size();i++){
            answer[i] = answers.get(i);
        }
        
        return answer;
    }
}
테스트 1 통과 (3.10ms, 72.8MB)
테스트 2 통과 (2.43ms, 75.3MB)
테스트 3 통과 (2.50ms, 72.9MB)
테스트 4 통과 (3.52ms, 82.1MB)
테스트 5 통과 (6.21ms, 78.8MB)
테스트 6 통과 (7.51ms, 89.2MB)
테스트 7 통과 (6.12ms, 80.4MB)
테스트 8 통과 (6.33ms, 81.5MB)
테스트 9 통과 (8.09ms, 85MB)
테스트 10 통과 (6.43ms, 83.6MB)
테스트 11 통과 (5.01ms, 87.7MB)
테스트 12 통과 (4.29ms, 76.9MB)
테스트 13 통과 (5.34ms, 77.3MB)
테스트 14 통과 (5.56ms, 80.6MB)
테스트 15 통과 (2.12ms, 72.5MB)
테스트 16 통과 (2.17ms, 75.4MB)
테스트 17 통과 (3.06ms, 80.6MB)
테스트 18 통과 (3.10ms, 76.8MB)
테스트 19 통과 (5.64ms, 85.2MB)
테스트 20 통과 (4.74ms, 68.7MB)
테스트 21 통과 (6.30ms, 82.1MB)
테스트 22 통과 (6.83ms, 76MB)
테스트 23 통과 (7.69ms, 71.7MB)
테스트 24 통과 (5.36ms, 79.2MB)
테스트 25 통과 (104.02ms, 199MB)
테스트 26 통과 (103.38ms, 184MB)
테스트 27 통과 (114.35ms, 188MB)
테스트 28 통과 (105.17ms, 208MB)
테스트 29 통과 (129.09ms, 201MB)
테스트 30 통과 (100.61ms, 186MB)
테스트 31 통과 (115.47ms, 200MB)
테스트 32 통과 (94.61ms, 195MB)

 

2. 비슷한 부분을 어떻게 줄일 수 있을까 고민했고, queue에 넣어 가지고 오는 방식으로 구현...

ArrayList를 array로 변경하는 과정에서 시간이 많이 소용되는 거 같아 바로 array에 넣는 방식으로 구현했는데

인덱싱보다 삽입이 많아서 그런지 오히려 효율이 떨어지는 거 같다.

import java.util.*;

class Solution {
    public String[] solution(String[] record) {
        ArrayList<String> answers = new ArrayList<>();
        HashMap <String, String> map = new HashMap<>();
        Queue <String> q = new LinkedList<>();
        
        for(String str : record) {
            String [] arr = str.split(" ");
            switch(arr[0]) {
                case "Enter": 
                    map.put(arr[1], arr[2]);
                    q.add(arr[1]);
                    break;
                case "Leave" : 
                   q.add("-"+arr[1]);
                    break;
                case "Change" : 
                    map.put(arr[1], arr[2]);
                    break;
                default :
                    break;
            }
        }
     
        while(!q.isEmpty()){
            String check = q.poll();
            if(check.charAt(0) == '-') {
                answers.add(map.get(check.substring(1)) +"님이 나갔습니다.");
            }else {
                answers.add(map.get(check) +"님이 들어왔습니다.");
            }
        }
       
        String [] answer = new String[answers.size()];
        for(int i = 0; i<answers.size();i++){
            answer[i] = answers.get(i);
        }
       
        return answer;
    }
}

 

테스트 1 통과 (2.53ms, 75.1MB)
테스트 2 통과 (2.76ms, 80.4MB)
테스트 3 통과 (2.66ms, 72.2MB)
테스트 4 통과 (2.65ms, 84.3MB)
테스트 5 통과 (8.23ms, 93.7MB)
테스트 6 통과 (5.36ms, 78.8MB)
테스트 7 통과 (5.70ms, 78.5MB)
테스트 8 통과 (6.91ms, 78MB)
테스트 9 통과 (5.47ms, 80.9MB)
테스트 10 통과 (5.95ms, 79.4MB)
테스트 11 통과 (5.48ms, 80.1MB)
테스트 12 통과 (4.83ms, 79.3MB)
테스트 13 통과 (7.97ms, 79.7MB)
테스트 14 통과 (5.84ms, 80.6MB)
테스트 15 통과 (2.64ms, 75.7MB)
테스트 16 통과 (2.29ms, 72.9MB)
테스트 17 통과 (3.20ms, 78.3MB)
테스트 18 통과 (2.90ms, 75.9MB)
테스트 19 통과 (5.83ms, 76.1MB)
테스트 20 통과 (6.37ms, 86.1MB)
테스트 21 통과 (6.28ms, 85.4MB)
테스트 22 통과 (6.72ms, 81.9MB)
테스트 23 통과 (6.57ms, 73.4MB)
테스트 24 통과 (5.79ms, 77.5MB)
테스트 25 통과 (76.70ms, 181MB)
테스트 26 통과 (114.45ms, 195MB)
테스트 27 통과 (108.27ms, 201MB)
테스트 28 통과 (105.61ms, 216MB)
테스트 29 통과 (97.49ms, 194MB)
테스트 30 통과 (83.80ms, 174MB)
테스트 31 통과 (81.62ms, 189MB)
테스트 32 통과 (80.30ms, 175MB)

 

반응형
Comments