[コードテスト]2019 KAKAO BLIND RECRUITMENTオープンチャットルーム


問題の説明


オープンチャットルーム
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以下です.
グループから出てきたプレイヤーがネット名を変更するなど、誤った入力はしません.

に答える


個人的にはとても簡単な問題だと思います最後の出力値を得るだけの問題なので、ニックネームでIDが変わらない特徴を変えれば良いのです.チャットルームに入るときと出るときは、ニックネームではなくIDによってマネージャウィンドウに追加し、最後のレコードまでIDを現在のニックネームに変えればいいです.もちろん、ニックネームは、ユーザーがニックネームにアクセスしたり変更したりしたときに更新されます.

コード#コード#

def solution(record):
    answer = []
    uidToName = {}
    for re in record:
        if re[0] == 'E':
            _, _id, name = re.split(' ')
            answer.append(_id + "님이 들어왔습니다.")
            uidToName[_id] = name
        elif re[0] == 'L':
            _, _id = re.split(' ')
            answer.append(_id + "님이 나갔습니다.")
        elif re[0] == 'C':
            _, _id, name = re.split(' ')
            uidToName[_id] = name
    for idx in range(0, len(answer)):
        _id, left = answer[idx].split('님')
        answer[idx] = uidToName[_id] + '님' + left
    return answer