👀 문제
https://programmers.co.kr/learn/courses/30/lessons/42888
👊 도전
1. 설계
- record를 한 번 읽으면서 HashMap에 유저 아이디와 닉네임을 저장한다.
- record를 다시 읽으면서 change가 아니면 result 조건에 맞게 answer에 저장한다.
2. 구현
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import java.util.*;
/**
*
* @author HEESOO
*
*/
class Solution {
public String[] solution(String[] record) {
HashMap<String, String> names=new HashMap<>();
int size=0;
for(String str:record) {
String[] array=str.split(" ");
if(array[0].equals("Enter")) {
names.put(array[1], array[2]);
size++;
}
else if(array[0].equals("Leave")) {
size++;
}
else if(array[0].equals("Change")){
names.replace(array[1], array[2]);
}
}
String[] answer=new String[size];
int idx=0;
for(String str: record) {
String[] array=str.split(" ");
if(array[0].equals("Change")) continue;
else if(array[0].equals("Enter"))
answer[idx++]=names.get(array[1])+"님이 들어왔습니다.";
else if(array[0].equals("Leave"))
answer[idx++]=names.get(array[1])+"님이 나갔습니다.";
}
return answer;
}
}
3. 결과
🤟 성공 🤟
4. 설명
- HashMap에 유저 아이디와 닉네임을 저장한다
- HashMap에 저장하면 탐색시간이 빠르고, 중복되는 key는 저장되지 않으므로 해당 문제에 적합하다.
- “Enter”이면 해당 아이디와 닉네임을 해쉬맵에 저장하고, “Leave”면 패스, “Change”면 아이디에 대한 닉네임을 변경한다.
- record의 문자열은 띄워쓰기를 기준으로 단어, 아이디, 닉네임이 들어오므로 split(“ “)으로 문자열을 쪼갠 후 사용한다.
- 다시 record를 읽으면서 answer에 메시지를 저장한다
- “Change”일 때에는 메시지가 없으므로 패스한다.
- “Enter”, “Leave”인 경우에 해쉬맵에서 아이디에 따른 닉네임을 찾아 조건에 맞게 메시지를 answer에 저장한다.