202108-TIL


アルゴリズム3日目


9時から12時までの間に時間制限がある試験日です.問題はプログラマーが提供したものです.(2018 KACA出題問題だそうです)まず問題を理解するのに10分ほどかかります次に、ノートに論理を整理する方法を考え、正しい編成がなければコードを記述しません.20分ほどの問題を考えたが、方向を見つけてコードを書いた.関数も3つくらい書いてありますが、このようにsolution関数のほかに他の関数も書いてあり、使ったことがあるのは指折り数えるほどのようです.
まず時間の無駄な部分はデバッグ時に作らなかった部分ですプロジェクト内のアルゴリズムの問題を解決するデバッグが必要であることを改めて感じました.このため、再生時間を算出する際には、変換が行われていないために値のエラーが発生し、関数から関数に値を渡す過程でエラーが発生する.
また、テストコードの例では、3番の状況を無視しています.#乙を一つに縛るとは思わなかった.先に刺すべきだと思いますが、どうやって刺すのか思い出せないので、繰り返し文を回しているうちに#に遭遇すると、総長さが1増えて、もう一度回ります.このように、総旋律の長さを求め、記憶した旋律と照合すると、記憶した旋律の最後のインデックスの次のインデックスの旋律の総値が#を含むと、不一致の値が返され、この問題を解決しようとする.まず、テストケースはすべて合格しましたが、もう一つの反例があるようです.見るとかなり不安なハーモニー…このコードを改善して解決したいのですが...この部分はまず説明を見て、どんな例外があるかを見つけて、このコードで解決します.

function convertToMin (time) {
    return +time[0]*600 + +time[1]*60 + +time[3]*10 + +time[4];
}

function analyzeMusic (musicinfo,userCode) {
    const MusicArray = musicinfo.split(',');
    const startT = convertToMin(MusicArray[0]);
    const endT = convertToMin(MusicArray[1]);
    let runtime = endT-startT;
    
    const musicTitle = MusicArray[2];
    const musicCode = MusicArray[3];   
    
    let count = 0;
    let totalCode = '';
    
    
    for(let i = 0; i<runtime; i++) {
        if(count == musicCode.length) count = 0;
        if(musicCode[count] =="#") runtime++;
        totalCode += musicCode[count];
        count++;

    }
    
    
    
    let judge =totalCode.indexOf(userCode);
    
    if(judge !== -1) {
        const newTotalCode = totalCode.slice(totalCode.indexOf(userCode));    
        if(newTotalCode[userCode.length] === "#") judge = -1;
    }
    
    
    
    
    const analyzeInfo = {runtime : runtime, judge: judge, musicTitle : musicTitle};
    
    return analyzeInfo;
    
}



function solution(m, musicinfos) {
    let answer = '';
    let mymusicInfo = {runtime : 0, judge: 1, musicTitle : "AQACS"};
    
    for(const musicinfo of musicinfos ) {
     const newMusicInfo = analyzeMusic(musicinfo,m);
       
     let NewMymusicInfo = compareMusic(mymusicInfo,newMusicInfo);
 
        mymusicInfo = NewMymusicInfo;
    }
    
  return answer = mymusicInfo.musicTitle;
   
}

function compareMusic (pre,cur) {
    if(cur.judge === -1) 
    {
        return pre;
    }
    else {
        if(pre.runtime >= cur.runtime) return pre;
        else  {
           return cur;
        }
    }
}

n/a.結論


改めて感じましたが、理由もなく複数の会社や有名なBoot campでコードテストを行うのは理由があるようです.ネットワーク全体の知識は判らないが、このコードテストを通してその人が問題を解決する能力は、他の不足概念を補完する意志をある程度保障できるかもしれないので、採用する人の立場から見ると、確率の高い選択肢である.