2019 KACAブラインド:チャットルームオープン


問題の説明
KakaoTalk公開チャットルームでは友達ではない人とチャットができ、仮想のニックネームでチャットルームに入ることができます.
新入社員のキム・クルーはKakaoTalkの公開チャットルームを開設するため、さまざまな人が入ったり出たりできる管理窓口を作ることにした.誰かがチャットルームに入ると、次のメッセージが出力されます.
  • [网名]入ってきました
  • 誰かがグループから外に出ると、次のメッセージが印刷されます.
  • 出て行った
  • グループ内で名前を変更する方法は2つあります.
  • グループを離れた後、新しいネット名に入ります.
  • チャットルームでニックネームを変更します.
  • ニックネームを変更すると、既存のチャットルームから出力された情報のニックネームもすべて変更されます.
    たとえば、チャットルームでMuziとProdoのニックネームを使用している人が順番に入ると、チャットルームから次のメッセージが出力されます.
  • Muziが入ってきました
  • Prodoが入ってきました
  • もしグループの中の人が外に出たら、グループには次のようなメッセージが表示されます.
  • Muziが入ってきました
  • Prodoが入ってきました
  • Muziが出てきました
  • Muziが脱退して再入場した場合、Prodo名義で入場すると、既存のチャットルームのMuziもProdoに変更され、以下のようになります.
  • Prodoが入ってきました
  • Prodoが入ってきました
  • Prodoが出てきました
  • Prodoが入ってきました
  • チャットルームでは重複したニックネームの使用が許可されているため、現在チャットルームにProdoを使用している人が2人います.2番目にチャットルームに入ったProdoがニックネームをRyanに変更すると、チャットルームの情報は次のように変更されます.
  • Prodoが入ってきました
  • Ryanが入ってきました
  • Prodoが出てきました
  • Prodoが入ってきました
  • solution関数を完了し、チャットルームを入力または離れると、パラメータがニックネームを変更したレコードを含む文字列配列レコードである場合、すべてのレコード処理が完了すると、最終的に部屋を開いた人が見たメッセージが文字列配列で返されます.
    せいげんじょうけん
    recordは、1または100000以下の文字列を含む配列です.
    次はrecordの文字列の説明です.
  • すべてのプレイヤーは[ユーザID]で区別される.
  • [ユーザID]ユーザが[ニックネーム]でチャットルームに入る[ユーザID][ニックネーム](ex.Enteruid 1234 Muzi)
  • [ユーザID]ユーザチャットルームを終了-Lave[ユーザID](ex.Leaveuid 1234)
  • [ユーザID]ユーザニックネームを[ユーザ名][ユーザID](ex.change uid 1234 Muzi)
  • に変更
  • 最初の単語はEnter、Leve、Changeです.
  • 各単語はスペースで区切られており、大文字、小文字、数字のみで構成されています.
  • ユーザーIDとニックネームは、大文字と小文字を区別します.
  • ユーザIDとニックネームの長さは1以上10以下である.
  • 群から出てきたプレイヤーがネット名を変更するなど、誤った入力はしません.
  • JAVAコード
    import java.util.ArrayList;
    import java.util.HashMap;
    
    class Solution {
        public String[] solution(String[] record) {
            HashMap<String,String> hm = new HashMap<String,String>();
            ArrayList<String> sList = new ArrayList<String>();
    
            for(String s : record){
                String[] tempSArr = s.split(" ");
                if(tempSArr[0].equals("Enter") || tempSArr[0].equals("Change")) hm.put(tempSArr[1], tempSArr[2]);
            }
    
            for(String s : record){
                String[] tempSArr = s.split(" ");
                if(!tempSArr[0].equals("Change")) {
                    String tempS = makeWord(tempSArr, hm);
                    sList.add(tempS);
                }
            }
    
            String[] answer = sList.toArray(new String[sList.size()]);
            return answer;
        }
        
        private String makeWord(String[] sArr, HashMap hm){
            String tempS = hm.get(sArr[1]) + "님이 ";
    
            if (sArr[0].equals("Enter")) tempS += "들어왔습니다.";
            else if (sArr[0].equals("Leave")) tempS += "나갔습니다.";
    
            return tempS;
        }
    }