[プログラマー:Lv 2]オープンチャットルーム(ft.kakao)

8796 ワード


1st Try

  • メソッド:1回の配列を囲んで変更すると、再び1つの配列を最初から囲んでidのニックネーム
  • を変更しようとします.
  • 問題:交換のたびにアレイ
  • を交換する
  • 推定複雑度:最小n回
  • 2nd Try


    方法

  • 🔹 idに対応するニックネームに直ちにアクセスし、変更可能な方法を考慮します(分割する必要はありません).
    🔹 一度回転した時にIDのニックネームをオブジェクトとして保存するのが有効だと思います(オブジェクトであればO(1)にアクセスまたは変更するため)
    🔹 推定複雑度:2 n(マッピングが2つあるため)
  • 結果:通過は2つだけ...?テストコードはを通過しました
  • 失敗原因:
    🔹 スピードじゃないみたい
    🔹 答え:split後、それぞれcontroller、id、ニックネームとして入れますが、leaveにはニックネームがないので定義されていません.テストコードの場合、後に同じid enterがあるので、undefinedを新しいニックネームに変更できます.ただし、他のテストコードでは、後でenterがない場合、ニックネームは未定義のままになり、失敗しました.
  • 問題コード
    record.map(item => {
            const [controller, id, nickname] = item.split(' ');
    				nickObj[id] = nickname;
        })
  • 解決コード
    record.map(item => {
            const [controller, id, nickname] = item.split(' ');
            if (controller !== 'Leave') {
                nickObj[id] = nickname;
            }
        })
  • 未定義の確認

  • 最終コード

    function solution(record) {
        const nickObj = {};
        const answer = [];
        
        record.map(item => {
            const [controller, id, nickname] = item.split(' ');
            if (controller !== 'Leave') {
                nickObj[id] = nickname;
            }
        })
        
        record.map(item => {
            const [controller, id, nickname] = item.split(' ');
            
            switch(controller) {
                case 'Enter':
                    answer.push(`${nickObj[id]}님이 들어왔습니다.`);
                    break;
                case 'Leave':
                    answer.push(`${nickObj[id]}님이 나갔습니다.`);
                    break;
                case 'Change':
                    break;
            }
        })
        
        return answer;
    }