Algorithm/Programmers

[Lv.2] 오픈채팅방 : Java

say! 2026. 2. 3. 11:54
728x90

 

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

-틀린 코드

첫 단어랑 아이디도 Map으로 저장함 > Map은 같은 key가 여러 번 나오면 덮어쓰기 발생, keySet()은 순서 보장해주지X

=> 첫 단어랑 아이디는 순서대로 List에 저장하기!

import java.util.*;

class Solution {
    public String[] solution(String[] record) {
        
        Map<String, String> user = new HashMap<>(); // 아이디, 닉네임 저장
        Map<String, String> messages = new HashMap<>();  // 첫 단어, 아이디 저장
        
        // 최종 닉네임 구하기 : Enter, Change인 경우에만
        for(String r : record){
            String[] s = r.split(" ");
            String m = s[0];
            String id = s[1];
            
            // 닉네임 저장하기
            if(m.equals("Enter") || m.equals("Change")){
                user.put(id, s[2]);
            }
            // 메시지 저장하기
            if(!m.equals("Change")){
                messages.put(m, id);
            }
        }
        
        // 메시지 출력하기
        String[] answer = new String[messages.size()];
        int i=0;
        for(String message : messages.keySet()){
            String uid = messages.get(message);
            if(message.equals("Enter")){
                answer[i] = user.get(uid) + "님이 들어왔습니다.";
            }
            else if(message.equals("Leave")){
                answer[i] = user.get(uid) + "님이 나갔습니다.";
            }
            i++;
        }
        
        
        return answer;
    }
}

 

-정답 코드

import java.util.*;

class Solution {
    public String[] solution(String[] record) {
        
        Map<String, String> user = new HashMap<>(); // 아이디, 닉네임 저장
        List<String[]> messages = new ArrayList<>();  // 첫 단어, 아이디 저장
        
        // 최종 닉네임 구하기 : Enter, Change인 경우에만
        for(String r : record){
            String[] s = r.split(" ");
            String m = s[0];
            String id = s[1];
            
            // 닉네임 저장하기
            if(m.equals("Enter") || m.equals("Change")){
                user.put(id, s[2]);
            }
            // 메시지 저장하기
            if(!m.equals("Change")){
                messages.add(new String[]{m, id});
            }
        }
        
        // 메시지 출력하기
        String[] answer = new String[messages.size()];
        int i =0;
        for(String[] message : messages){
            String c = message[0];
            String uid = message[1];
            
            if(c.equals("Enter")){
                answer[i] = user.get(uid) + "님이 들어왔습니다.";
            }
            else if(c.equals("Leave")){
                answer[i] = user.get(uid) + "님이 나갔습니다.";
            }
            i++;
        }
        
        
        return answer;
    }
}