오픈채팅방
문제정의
오픈채팅방에 사람들이 들어왔다 나가는 관리자 창을 작성하는 프로그램을 만드는 문제이다. 닉네임간에 중복을 허용하며, 이름을 바꾸면 바꾼 시점부터가 아니라 모든 시점의 닉네임이 변경된다. 유저들은 uid로 구분한다.
문제풀이
전체 코드는 다음과 같다. 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
39
40
41
42
43
44
45
46
47
48
49
50package level2;
import java.util.ArrayList;
import java.util.HashMap;
public class OpenChatting {
//프로그래머스 문제풀이 level2 오픈채팅방
public static void main(String[] args) {
String[] record = {
"Enter uid1234 Muzi",
"Enter uid4567 Prodo",
"Leave uid1234",
"Enter uid1234 Prodo",
"Change uid4567 Ryan"};
ArrayList<String> answer = new ArrayList<String>();
HashMap<String, String> map = new HashMap<>();
for(String s : record)
{
String[] arr = s.split(" ");
if(!arr[0].equals("Leave"))
map.put(arr[1], arr[2]);
}
for(String s : record)
{
String[] arr = s.split(" ");
StringBuilder buff = new StringBuilder();
if(!arr[0].equals("Change"))
{
buff.append(map.get(arr[1]));
if(arr[0].equals("Enter"))
buff.append("님이 들어왔습니다.");
else if(arr[0].equals("Leave"))
buff.append("님이 나갔습니다.");
answer.add(buff.toString());
}
}
}
}
이 과정을 끝내면 각 uid마다 최종 닉네임이 무엇인지 알 수 있다. 이제 이를 활용하여 문제에서 원하는 형식으로 답을 내면 된다. 들어오고 나간다는 문자에 따라 적절한 형식을 버퍼에 삽입하고 이를 어레이리스트에 삽입한다.
최종시간복잡도는 \(O(n)\)이다.