728x90
코드 힌트
- 유저 정보 관리:
- 사용자 ID와 닉네임을 관리하기 위해 HashMap<String, String>을 사용합니다.
- 이 맵은 각 사용자의 최신 닉네임을 저장하며, 나중에 메시지를 생성할 때 이를 사용하여 정확한 닉네임을 표시합니다.
- 행동 기록 및 메시지 생성:
- 사용자의 행동(Enter, Leave, Change)을 시간 순서대로 처리하여 각 행동에 맞는 메시지를 기록합니다.
- Enter와 Leave는 메시지를 생성하여 리스트에 추가하고, Change는 해당 ID의 닉네임만 업데이트합니다.
- 닉네임 변경 처리:
- Change 동작이 발생할 때마다 HashMap에서 해당 사용자의 닉네임을 업데이트합니다.
- 이 업데이트는 이전에 기록된 메시지의 닉네임에도 반영되기 때문에, 메시지 생성 시 올바른 닉네임이 사용됩니다.
- 최종 메시지 배열 생성:
- 모든 로그를 처리한 후, 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
'프로그래머스(Java) > Level 2' 카테고리의 다른 글
[프로그래머스] [1차] 프렌즈4블록 (1) | 2024.09.03 |
---|---|
[프로그래머스] 숫자 변환하기 (0) | 2024.09.02 |
[프로그래머스] 택배상자 (0) | 2024.08.23 |
[프로그래머스] 주차 요금 계산 (0) | 2024.08.21 |
[프로그래머스] 스킬트리 (0) | 2024.08.21 |