[프로그래머스] 오픈채팅방

2020. 4. 2. 15:27프로그래머스/카카오

import java.util.*;

class Solution {
    
    class User{
        String uid;
        String nickname;
        
        User(String uid, String nickname){
            this.uid = uid;
            this.nickname = nickname;
        }
    }
    
    public String[] solution(String[] record) {
        String[] answer = {};
        int answersize = 0;
        List<User> list = new ArrayList<>();
        
        
        
        for(int i=0; i<record.length; i++){
            String[] spr = splitRecord(record[i]);
            
            if(spr[0].equals("Enter") || spr[0].equals("Change")){
                if(spr[0].equals("Enter")){
                    answersize++;
                }
                for(int j=0; j<list.size(); j++){
                    if(list.size()==0){
                        list.add(new User(spr[1],spr[2]));
                        break;
                    }
                    
                    if(list.get(j).uid.equals(spr[1])){
                        list.get(j).nickname = spr[2];
                        break;
                    }
                    if(j==list.size()-1 && !list.get(j).uid.equals(spr[1])){
                        list.add(new User(spr[1],spr[2]));
                        break;
                    }
                }
            }else{
                answersize++;
            }
        }
        answer = new String[answersize];
        
        
       for(int i=0; i<list.size(); i++){
           System.out.println(list.size());
       }
        
        
        for(int i=0; i<record.length; i++){
            String[] spr = splitRecord(record[i]);
            
            if(spr[0].equals("Enter")){
                String temp = "";
                for(int j=0; j<list.size(); j++){
                    if(list.get(j).uid.equals(spr[1])){
                        temp += list.get(j).nickname;
                        break;
                    }
                }
                answer[i] = temp+"님이 들어왔습니다.";
            }else if(spr[1].equals("Leave")){
                String temp = "";
                for(int j=0; j<list.size(); j++){
                    if(list.get(j).uid.equals(spr[1])){
                        temp = list.get(j).nickname;
                        break;
                    }
                }
                answer[i] = temp+"님이 나갔습니다.";
            }else{
                continue;
            }
        }
        
        

        
       
        
        
        return answer;
    }
    
    public String[] splitRecord(String s){
        return s.split(" ");
    }
}

26번부터 시간초과.

 

import java.util.*;

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

해쉬맵을 이용하여 빠르게 풀어서 통과.

두 값을 가지는 객체가 필요할때 class를 새로 만드는 방법보단 HashMap을 고려해보는게 좋겠다. 

 

HashMap 주요 메소드

-       put(key,value ) : 키와 밸류값으로 구성된 새로운 데이터를 추가한다.

이때, 같은 키값으로 다른 밸류값을 넣어주면 기존의 키값에 대한 밸류값이 변한다.

같은 키값을 가지는 두개의 데이터가 생기는것이 아니다.

-       get(key) : 지정한 key에 해당하는 데이터를 반환한다.

-       remove(key) : 지정한 key에 해당하는 데이터를 삭제한다.

-       containKey(key) : 지정한 key가 존재하는지 여부를 반환한다.

-       containValue(value) : 지정한 value가 존재하는지 여부를 반환한다.

-       size( ) : map의 요소 개수를 반환한다.

-       isEmpty( ) : map이 비었는지 여부를 반환한다.