https://school.programmers.co.kr/learn/courses/30/lessons/42888
초반에는 전부 들어 온 후에 닉네임을 변경 해 주어야 한다고 생각해서 Enter를 통해 HashMap을 생성한 후 이 key값을 이용해서 value를 변경하도록 구현하였다. 하지만, 테스트코드의 일부를 통과하지 못하였다.
시점에 문제가 있었기 때문이다. 우선, 내가 처음에 생각했던 대로 전부 입장하고 그 이후에 닉네임을 change해 주면 출력 메세지가 달라진다. 그러니 변경과 입장의 시점을 동시에 두어야 한다.
change를 하고 나중에 enter를 하게 되면 update가 되지 않기 때문이다(enter에서 put(input[1], input[2])로 구현했기 때문)
import java.util.*;
class Solution {
public ArrayList solution(String[] record) {
//record 안에는 Enter uid1234 Muzi같은 식으로 들어 있음
//해시맵에 key를 uid로, value를 Muzi로 설정
//이름 바뀐걸 어떻게 적용시키나
//시점 중요 : enter -> change -? leave
HashMap<String, String> map = new HashMap<>();
int r = record.length;
ArrayList<String> answer = new ArrayList<>();
for(int i=0; i<r; i++){
String[] input = record[i].split(" ");
if(input[0].equals("Enter") || input[0].equals("Change")){ //입장인 경우에는
map.put(input[1], input[2]); //map에 추가
}
}
for(int i=0; i<r; i++){
String[] input = record[i].split(" ");
if(input[0].equals("Enter")){ //입장이면 변경된 닉네임으로 출력
answer.add(map.get(input[1]) + "님이 들어왔습니다.");
}else if(input[0].equals("Leave")){
answer.add(map.get(input[1]) + "님이 나갔습니다.");
}
}
return answer;
}
}