코딩테스트/프로그래머스

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

애플쩀 2022. 7. 14. 03:44
  • 닉네임이 계속 갱신되고, 아이디랑 짝이되니까 HashMap으로 생성 
  • 결과를 ArrayList에 담아준다 
  • record 길이만큼 for문을 반복하여  Enter, Change인 경우에 닉네임이 바뀌니 
  • substring으로 잘라서 map에 아이디와 닉네임을 넣어준다. 
  • 다시 for문을 record길이만큼 반복하여 
  • enter와 leave일때만 메세지를 출력하니, 메세지를 출력해주고 int형 배열로 바꿔서 반환 
import java.util.*;
class Solution {
    public static String[] solution(String[] record) {
        String[] answer = {};
        String id="";
        String name="";
        //아이디와 닉네임 
        HashMap <String, String> map=new HashMap<>();
        //결과
        ArrayList<String> result=new ArrayList<>();
        
           for(int i=0; i<record.length; i++){
            if(record[i].contains("Enter")){ 
            id=record[i].substring(6,record[i].lastIndexOf(" "));
            name=record[i].substring(record[i].lastIndexOf(" ")+1);
            map.put(id,name);    	
            }
            //Change =>map.getOrDefault(id,name)
            else if(record[i].contains("Change")){
           
            id=record[i].substring(7,record[i].lastIndexOf(" "));
          name=record[i].substring(record[i].lastIndexOf(" ")+1);
          map.put(id,name);
            }
            //Leave
            else if(record[i].contains("Leave")){
                id=record[i].substring(6);
            }
                }//for
       
          for (int i = 0; i < record.length; i++) {
        	  if(record[i].contains("Enter")){ 
        		  id=record[i].substring(6,record[i].lastIndexOf(" "));
                 result.add(map.get(id)+"님이 들어왔습니다.");
                  	
        	  }
                  //Leave
                  else if(record[i].contains("Leave")){
                	  id=record[i].substring(6);
                      result.add(map.get(id)+"님이 나갔습니다.");
                  }
		}//for
          answer=result.toArray(new String[0]);
   
                return answer;
            }

}

 

 

고칠점

 substring이 아닌 split 함수를 이용했다면 더 간단했을듯 

 

 

 

 

고친코드 
  • split함수로 나눠주고 
  • map에 id와 닉네임을 넣어준다 
  • result에는 (닉네임은 바뀌니 ) id 값으로 넣어준다. 
  • 두번째 for문은 결과가 저장된 result가 아이디+"님이 ~입니다." 이므로 
  • 이 아이디를 최종 닉네임으로 바꿔준다. 
import java.util.*;
class Solution {
    public static String[] solution(String[] record) {
       
        //아이디와 닉네임 
        HashMap <String, String> map=new HashMap<>();
        //결과
        ArrayList<String> result=new ArrayList<>();
        
        for(int i=0; i<record.length; i++){
         String[] sp=record[i].split(" ");
            if(sp[0].equals("Enter")){
                map.put(sp[1],sp[2]);
                result.add(sp[1]+"님이 들어왔습니다.");
            }else if(sp[0].equals("Change")){
                 map.replace(sp[1],sp[2]);
            }else if(sp[0].equals("Leave")){
                result.add(sp[1]+"님이 나갔습니다.");
            }
         }//for
        
         String[] answer = new String[result.size()];
          for (int i = 0; i < result.size(); i++) {
            int idx=result.get(i).indexOf("님");
            String id=result.get(i).substring(0,idx);
            answer[i]=map.get(id)+result.get(i).substring(idx);

		}//for
         
                return answer;
            }

}