オープンチャットルーム
ステップ2
問題の説明
KakaoTalk公開チャットルームでは友達ではない人とチャットができ、仮想のニックネームでチャットルームに入ることができます.
新入社員のキム・クルーはKakaoTalkの公開チャットルームを開設するため、さまざまな人が入ったり出たりできる管理窓口を作ることにした.誰かがチャットルームに入ると、次のメッセージが出力されます.
「ニックネームが入ってきた」
誰かがグループから外に出ると、次のメッセージが印刷されます.
[ニックネーム]出て行った
グループ内で名前を変更する方法は2つあります.
1)チャットルームを出て、新しいニックネームに入ります.
2)チャットルームでニックネームを変更する.
ニックネームを変更すると、既存のチャットルームから出力された情報のニックネームもすべて変更されます.
たとえば、チャットルームで「Muzi」と「Prodo」のニックネームを使用している人が順番に入ると、チャットルームから次のメッセージが出力されます.
「ムジが入ってきた」
「Prodoが入ってきた」
もしグループの中の人が外に出たら、グループには次のようなメッセージが表示されます.
「ムジが入ってきた」
「Prodoが入ってきた」
「ムジは出て行った」
Muziが脱退して再入場した場合、Prodo名義で入場すると、既存のチャットルームのMuziもProdoに変更され、以下のようになります.
「Prodoが入ってきた」
「Prodoが入ってきた」
「Prodoが出てきた」
「Prodoが入ってきた」
チャットルームでは重複したニックネームの使用が許可されているため、現在チャットルームにProdoを使用している人が2人います.2番目にチャットルームに入ったProdoがニックネームをRyanに変更すると、チャットルームの情報は次のように変更されます.
「Prodoが入ってきた」
「Ryanが入ってきた」
「Prodoが出てきた」
「Prodoが入ってきた」
solution関数を完了し、チャットルームを入力または離れると、パラメータがニックネームを変更したレコードを含む文字列配列レコードである場合、すべてのレコード処理が完了すると、最終的に部屋を開いた人が見たメッセージが文字列配列で返されます.
import java.util.*;
import java.util.stream.*;
class Solution {
public String[] solution(String[] record) {
ArrayList<String> ment = new ArrayList<>(); // 메시지를 저장할 리스트
ArrayList<String> user = new ArrayList<>(); // 사용자들의 id를 저장할 리스트
ArrayList<String> answer = new ArrayList<>(); // 완성된 메시지를 기록할 리스트
Map<String, String> map = new HashMap<>(); // 사용자의 최신 닉네임을 저장하기 위한 맵
for (int i = 0; i < record.length; i++) {
String[] temp = record[i].split(" ");
if (temp.length != 2)
map.put(temp[1], temp[2]);
if (!temp[0].equals("Change"))
user.add(temp[1]);
if (temp[0].equals("Enter"))
ment.add("님이 들어왔습니다.");
else if (temp[0].equals("Leave"))
ment.add("님이 나갔습니다.");
}
for (int i = 0; i < ment.size(); i++) {
answer.add(map.get(user.get(i)) + ment.get(i));
}
return answer.toArray(new String[0]);
}
}
基本的な方法は次のとおりです.1)ユーザの固有値idを順番に格納する.
2)ユーザの動作を順番に記憶する.このとき保存される値は、後のメッセージ(ex.)です.
3)ユーザの最新のニックネームを保持するためにHashMap(id,ニックネーム)に保存する.
4)idとメッセージを保存順に出力する.このときidは最新のニックネームに変更されます.
.😣
Reference
この問題について(オープンチャットルーム), 我々は、より多くの情報をここで見つけました https://velog.io/@ghc1124/프로그래머스-오픈채팅방テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol