Skip to content

Commit bbfd2d1

Browse files
committed
nsun9505 solved 오픈채팅방
1 parent d274e17 commit bbfd2d1

File tree

2 files changed

+112
-0
lines changed

2 files changed

+112
-0
lines changed
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
# [2019 KAKAO BLIND RECRUITMENT] 오픈채티방 - JAVA
2+
3+
## 분류
4+
> 해시
5+
>
6+
> 구현
7+
8+
## 코드
9+
```java
10+
import java.util.ArrayList;
11+
import java.util.HashMap;
12+
import java.util.StringTokenizer;
13+
14+
public class Solution {
15+
public String[] solution(String[] record) {
16+
StringBuilder sb = new StringBuilder();
17+
String[] messages = {"님이 들어왔습니다.", "님이 나갔습니다."};
18+
int N = record.length;
19+
ArrayList<Message> answer = new ArrayList<>();
20+
HashMap<String, String> idToNickName = new HashMap<>();
21+
for(int i=0; i<N; i++){
22+
StringTokenizer st = new StringTokenizer(record[i]);
23+
String cmd = st.nextToken();
24+
String id = st.nextToken();
25+
26+
if(cmd.equals("Enter")){
27+
answer.add(new Message(id,0));
28+
idToNickName.put(id, st.nextToken());
29+
}
30+
else if(cmd.equals("Leave"))
31+
answer.add(new Message(id, 1));
32+
else if(cmd.equals("Change"))
33+
idToNickName.put(id, st.nextToken());
34+
}
35+
36+
String[] ret = new String[answer.size()];
37+
int idx = 0;
38+
for(Message msg : answer)
39+
ret[idx++] = idToNickName.get(msg.id) + messages[msg.messageIdx];
40+
41+
return ret;
42+
}
43+
44+
static class Message{
45+
String id;
46+
int messageIdx;
47+
48+
public Message(String id, int messageIdx) {
49+
this.id = id;
50+
this.messageIdx = messageIdx;
51+
}
52+
}
53+
}
54+
```
55+
56+
## 문제 풀이
57+
id를 해시맵의 키로 주고 닉네임을 Value로 줘서 쉽게 풀 수 있었습니다.
58+
59+
"님이 들어왔습니다.", "님이 나갔습니다."와 같은 메시지는 따로 배열에 저장합니다.
60+
61+
id가 바뀌면, HashMap에서 id에 해당하는 닉네임 값을 변경해줍니다.
62+
63+
정답으로 출력할 메시지는 {id, message index}와 같이 리스트에 순서대로 저장합니다.
64+
65+
리턴하기 전에 HsahMap에서 id로 닉네임을 찾고 여기에 message index에 해당하는 문자를 합쳐서 배열에 저장하고, 리턴하면 됩니다.
66+
67+
## 후기
68+
재미있어요~
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import java.util.ArrayList;
2+
import java.util.HashMap;
3+
import java.util.StringTokenizer;
4+
5+
public class Solution {
6+
public String[] solution(String[] record) {
7+
StringBuilder sb = new StringBuilder();
8+
String[] messages = {"님이 들어왔습니다.", "님이 나갔습니다."};
9+
int N = record.length;
10+
ArrayList<Message> answer = new ArrayList<>();
11+
HashMap<String, String> idToNickName = new HashMap<>();
12+
for(int i=0; i<N; i++){
13+
StringTokenizer st = new StringTokenizer(record[i]);
14+
String cmd = st.nextToken();
15+
String id = st.nextToken();
16+
17+
if(cmd.equals("Enter")){
18+
answer.add(new Message(id,0));
19+
idToNickName.put(id, st.nextToken());
20+
}
21+
else if(cmd.equals("Leave"))
22+
answer.add(new Message(id, 1));
23+
else if(cmd.equals("Change"))
24+
idToNickName.put(id, st.nextToken());
25+
}
26+
27+
String[] ret = new String[answer.size()];
28+
int idx = 0;
29+
for(Message msg : answer)
30+
ret[idx++] = idToNickName.get(msg.id) + messages[msg.messageIdx];
31+
32+
return ret;
33+
}
34+
35+
static class Message{
36+
String id;
37+
int messageIdx;
38+
39+
public Message(String id, int messageIdx) {
40+
this.id = id;
41+
this.messageIdx = messageIdx;
42+
}
43+
}
44+
}

0 commit comments

Comments
 (0)