본문 바로가기

프로그래머스(Java)/Level 2

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

728x90

코드 힌트

  1. 유저 정보 관리:
    • 사용자 ID와 닉네임을 관리하기 위해 HashMap<String, String>을 사용합니다.
    • 이 맵은 각 사용자의 최신 닉네임을 저장하며, 나중에 메시지를 생성할 때 이를 사용하여 정확한 닉네임을 표시합니다.
  2. 행동 기록 및 메시지 생성:
    • 사용자의 행동(Enter, Leave, Change)을 시간 순서대로 처리하여 각 행동에 맞는 메시지를 기록합니다.
    • Enter와 Leave는 메시지를 생성하여 리스트에 추가하고, Change는 해당 ID의 닉네임만 업데이트합니다.
  3. 닉네임 변경 처리:
    • Change 동작이 발생할 때마다 HashMap에서 해당 사용자의 닉네임을 업데이트합니다.
    • 이 업데이트는 이전에 기록된 메시지의 닉네임에도 반영되기 때문에, 메시지 생성 시 올바른 닉네임이 사용됩니다.
  4. 최종 메시지 배열 생성:
    • 모든 로그를 처리한 후, messageList에 저장된 메시지를 사용자 ID에 맞는 최종 닉네임으로 치환하여 결과 배열을 생성합니다.
    • 이 배열은 기록된 메시지를 최종적으로 보여줄 형식으로 변환한 것입니다.

 

 


정답은 더보기 클릭

더보기
import java.util.*;

class Solution {
    public String[] solution(String[] record) {
        // 유저 ID와 닉네임을 관리하는 HashMap
        HashMap<String, String> userDB = new HashMap<>();
        
        // 행동 기록을 저장할 리스트
        List<String> messageList = new ArrayList<>();
        
        // 기록을 순차적으로 처리
        for (String log : record) {
            String[] parts = log.split(" ");
            
            String action = parts[0];  // 행동: Enter, Leave, Change
            String userId = parts[1];   // 사용자 ID
            
            // 사용자가 입장한 경우
            if (action.equals("Enter")) {
                String userName = parts[2];  // 닉네임
                userDB.put(userId, userName);  // ID에 대한 닉네임을 업데이트
                messageList.add(userId + ":님이 들어왔습니다.");
            } 
            // 사용자가 퇴장한 경우
            else if (action.equals("Leave")) {
                messageList.add(userId + ":님이 나갔습니다.");
            }
            // 닉네임을 변경한 경우
            else {
                String userName = parts[2];
                userDB.put(userId, userName);  // ID에 대한 닉네임을 업데이트
            }
        }
        
        // 최종 메시지를 생성
        String[] result = new String[messageList.size()];
        for (int i = 0; i < messageList.size(); i++) {
            String[] msgArr = messageList.get(i).split(":");
            String userId = msgArr[0];
            String msg = msgArr[1];
            
            String userName = userDB.get(userId);  // 최종 닉네임을 가져옴
            
            result[i] = userName + msg;  // 최종 메시지 생성
        }
        return result;
    }
}
728x90