프로그래머스>코딩테스트 연습>2019 KAKAO BLIND RECRUITMENT>오픈채팅방
채팅방에서 닉네임을 변경하는 방법은 다음과 같이 두 가지이다.
1. 채팅방을 나간 후, 새로운 닉네임으로 다시 들어간다.
2. 채팅방에서 닉네임을 변경한다.
그러므로 이름이 변경될 수 있는 경우는 두가지 경우(Enter
, Change
)이다. 유저가 나갔다 다시 들어오더라도 UID는 동일하기 때문에 이전에 출입했던 기록의 name 또한 변경되어야 한다.
Map 자료구조를 활용해서 UID - name
값을 저장한다. 이미 들어온 유저가 나갔다 다시 들어오거나(Enter) 이름을 변경하면(Change) 이미 있던 key-value 데이터가 덮어쓰기 된다.
최종적으로, 저장해놓은 map 데이터를 통해 UID로 name값을 가져온 후 Enter, Leave 경우의 안내 메세지를 리턴하면 된다.
import java.util.ArrayList;
import java.util.HashMap;
class Solution {
public static String[] solution(String[] record) {
int n = record.length;
HashMap<String, String> map = new HashMap<>(); // UID, Name
for (int i = 0; i < n; i++) {
String[] record_split = record[i].split(" ");
if(record_split[0].charAt(0)=='E' || record_split[0].charAt(0)=='C'){
map.put(record_split[1], record_split[2]); // 이미 map에 존재했다면 덮어쓰기 됨
}
}
ArrayList<String> arr = new ArrayList<>();
for (int i = 0; i < n; i++) {
String[] record_split = record[i].split(" ");
char type = record_split[0].charAt(0);
// UID로 name을 get
// enter과 leave만 출력해줌
switch (type){
case 'E':
arr.add(map.get(record_split[1]) + "님이 들어왔습니다.");
break;
case 'L':
arr.add(map.get(record_split[1]) + "님이 나갔습니다.");
break;
}
}
// answer 만들기
String[] answer = new String[arr.size()];
for (int i=0; i<arr.size(); i++) {
answer[i] = arr.get(i);
}
return answer;
}
}
난이도 : LEVEL 2
딱히 없음