[Programmers] Lv2. オープンチャットルーム[python]


問題の説明


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を変更]に変更(ex.[uid 1234 Muziを変更])
最初の言葉はEnter、Leave、Changeです.
各語はスペースで区切られ、大文字、小文字、数字のみで構成されています.
プレイヤーIDとニックネームは大文字と小文字を区別します.
プレイヤーIDとニックネームの長さは1以上10以下です.
グループから出てきたプレイヤーがネット名を変更するなど、誤った入力はしません.

I/O例



Code

def solution(record):
    answer =[]
    dic = {}
    
    for s in record:
        if len(s.split())==3:
            dic[s.split()[1]]= s.split()[-1]
    
    for s in record:
        if s.split()[0]=='Enter':
            answer.append('%s님이 들어왔습니다.' %dic[s.split()[1]])
        if s.split()[0] =='Leave':
            answer.append('%s님이 나갔습니다.' %dic[s.split()[1]])


    return answer
ニックネームとuidをdickShowneryに設定できるのは、
  • recordが3つの長さ(「Leave uid 1234」を除く)の場合のみです.
  • recordを行ごとに比較し、「Enter」、「uidが入ってきた」に変更し、
  • に追加します.
  • 最初は「Enter」「Leave」「Change」がリストに保存され、辞書を作成して比較していましたが、やはり実行中にエラーが発生していました.
  • 2479172 2 2 2 2回目は最初から「Enter」を比較し、分割してdictionaryに入れ、reocdと比較して答えに追加することで、コードが簡潔になり、実行時にもエラーが発生しない2479182.