[Programmers](python)オープンチャット2019 KAO BLIND RECRUIMENT


🧩 質問する


オープンチャットルーム


KakaoTalk公開チャットルームでは友達ではない人とチャットができ、仮想のニックネームでチャットルームに入ることができます.
新入社員のキム・クルーはKakaoTalkの公開チャットルームを開設するため、さまざまな人が入ったり出たりできる管理窓口を作ることにした.誰かがチャットルームに入ると、次のメッセージが出力されます.
「ニックネームが入ってきた」
誰かがグループから外に出ると、次のメッセージが印刷されます.
[ニックネーム]出て行った
グループ内で名前を変更する方法は2つあります.
グループを離れた後、新しいネット名に入ります.
グループで名前を変更します.
ニックネームを変更すると、既存のチャットルームから出力された情報のニックネームもすべて変更されます.
たとえば、チャットルームで「Muzi」と「Prodo」のニックネームを使用している人が順番に入ると、チャットルームから次のメッセージが出力されます.
「ムジが入ってきた」
「Prodoが入ってきた」
もしグループの中の人が外に出たら、グループには次のようなメッセージが表示されます.
「ムジが入ってきた」
「Prodoが入ってきた」
「ムジは出て行った」
Muziが脱退して再入場した場合、Prodo名義で入場すると、既存のチャットルームのMuziもProdoに変更され、以下のようになります.
「Prodoが入ってきた」
「Prodoが入ってきた」
「Prodoが出てきた」
「Prodoが入ってきた」
チャットルームでは重複したニックネームの使用が許可されているため、現在チャットルームにProdoを使用している人が2人います.2番目にチャットルームに入ったProdoがニックネームをRyanに変更すると、チャットルームの情報は次のように変更されます.
「Prodoが入ってきた」
「Ryanが入ってきた」
「Prodoが出てきた」
「Prodoが入ってきた」
solution関数を完了し、チャットルームを入力または離れると、パラメータがニックネームを変更したレコードを含む文字列配列レコードである場合、すべてのレコード処理が完了すると、最終的に部屋を開いた人が見たメッセージが文字列配列で返されます.

せいげんじょうけん


recordは、1または100000以下の文字列を含む配列です.
次はrecordの文字列の説明です.
  • すべてのプレイヤーは[ユーザID]で区別される.
    [ユーザID]ユーザは[ニックネーム]でチャットルームに入る-[Enter[ユーザID][ニックネーム](ex.[Enter uid 1234 Muzi])
    [ユーザID]ユーザチャットルームを終了する-[ユーザID](ex.[Leaveuid 1234])
    [ユーザID]ユーザニックネームを[ユーザ名]-[ユーザIDを変更]
  • 最初の単語はEnter、Leve、Changeです.
  • 各単語はスペースで区切られており、大文字、小文字、数字のみで構成されています.
  • ユーザーIDとニックネームは、大文字と小文字を区別します.
  • ユーザIDとニックネームの長さは1以上10以下である.
  • 群から出てきたプレイヤーがネット名を変更するなど、誤った入力はしません.
  • オープンチャットルーム

    🧩 もんだいぶんせき


    "Enter uid1234 Muzi"
  • 文字列が空であるため、
  • はスペースを起点としてスライドする.
    最終更新ニックネーム
  • のDickShownery制作
  • 「Enter」「Leave」の順にディック社からidでニックネーム
  • を入れる
  • 「変更」追加出力
  • は不要

    🏁 説明する

    # Programmers _ Lv.2 오픈채팅방 2019 KAKAO BLIND RECRUITMENT
    
    
    def solution(record, id=[], answer=[]):
        for r in record:
            id.append(r.split()[1]) 
        dic_id = {x : '' for x in id} # 바뀌는 닉네임을 계속 업데이트하며 아이디와 최종 닉네임을 딕셔너리에 저장
    
        for r in record:
            if len(r.split()) > 2: # Leave일 때 닉네임은 바뀌지 않으므로 제외
                dic_id.update({r.split()[1]:r.split()[2]})
    
        for r in record:
            if r.split()[0] == 'Enter': # Change일 때는 채팅방에 아무런 변화가 없으므로 출력하지 않음
                answer.append(f'{dic_id[r.split()[1]]}님이 들어왔습니다.')
            elif r.split()[0] == 'Leave':
                answer.append(f'{dic_id[r.split()[1]]}님이 나갔습니다.')
    
        return answer