중복을 허용하지 않고 <key, value> 쌍으로 데이터를 저장하는 HashMap의 특징을 이용해 문제를 풀었다.
전체 코드는 다음과 같다.
import java.util.*;
class Solution {
public String[] solution(String[] record) {
HashMap<String, String> hashMap = new HashMap<>();
ArrayList<String> arrayList = new ArrayList<>();
for(int i = 0; i < record.length; i++){
String[] now = record[i].split(" ");
if(now[0].equals("Enter") || now[0].equals("Change")){
hashMap.put(now[1], now[2]);
}
}
for(int i = 0; i < record.length; i++){
String[] now = record[i].split(" ");
String tmp;
if(now[0].equals("Enter")){
tmp = hashMap.get(now[1]) + "님이 들어왔습니다.";
arrayList.add(tmp);
}else if(now[0].equals("Leave")){
tmp = hashMap.get(now[1]) + "님이 나갔습니다.";
arrayList.add(tmp);
}
}
String[] answer = new String[arrayList.size()];
for(int i = 0; i < arrayList.size(); i++){
answer[i] = arrayList.get(i);
}
return answer;
}
}
<유저 아이디, 닉네임> 쌍으로 데이터를 저장할 HashMap와
정답을 저장할 ArrayList를 만들었다.
class Solution {
public String[] solution(String[] record) {
HashMap<String, String> hashMap = new HashMap<>();
ArrayList<String> arrayList = new ArrayList<>();
기록 배열 record의 길이만큼 반복하며
각 기록을 " " 기준으로 나누어 배열에 저장해 액션/아이디/닉네임 을 저장한다.
for(int i = 0; i < record.length; i++){
String[] now = record[i].split(" ");
...
}
액션이 "Enter" 또는 "Change"인 경우에 닉네임의 변경이 발생할 수 있다.
그러므로 이러한 경우에 <아이디, 닉네임> 쌍으로 HashMap에 데이터를 넣는다.
for(int i = 0; i < record.length; i++){
String[] now = record[i].split(" ");
if(now[0].equals("Enter") || now[0].equals("Change")){
hashMap.put(now[1], now[2]);
}
}
반복문을 마치면 아이디당 최종 변경 닉네임이 HashMap에 저장된다.
다시 한번 기록 배열 record의 길이만큼 반복하며
각 기록을 " " 기준으로 나누어 배열에 저장해 액션/아이디/닉네임 을 저장한다.
for(int i = 0; i < record.length; i++){
String[] now = record[i].split(" ");
...
}
액션이 "Enter" 또는 "Leave" 인 경우 채팅방 메시지에 기록이 남으므로 정답 배열에 추가해야 한다.
이 때 닉네임은 HashMap에서 key값을 아이디로 참조해서 최종적으로 변경된 닉네임을 얻는다.
액션과 닉네임으로 메시지를 만들어 정답 배열 ArrayList에 집어넣는다.
for(int i = 0; i < record.length; i++){
String[] now = record[i].split(" ");
String tmp;
if(now[0].equals("Enter")){
tmp = hashMap.get(now[1]) + "님이 들어왔습니다.";
arrayList.add(tmp);
}else if(now[0].equals("Leave")){
tmp = hashMap.get(now[1]) + "님이 나갔습니다.";
arrayList.add(tmp);
}
}
마지막으로 정답 배열 ArrayList의 내용을 answer[] 배열에 복사하여 반환한다.
String[] answer = new String[arrayList.size()];
for(int i = 0; i < arrayList.size(); i++){
answer[i] = arrayList.get(i);
}
return answer;
}