[プログラマー][JS]JOYSTIC


質問:JOY STIC


1つの問題は、文字列が与えられた場合、AAAから開始し、数回以内に文字列を作成することです.
質問:https://programmers.co.kr/learn/courses/30/lessons/42860#

解決策

  • 文字に対して、アスキーコードで比較すると、簡単に解決できます.
  • アルファベットの移動回数を答えに加算します.
  • 文字を完成させ、隣の箱に移動することを確認します.
  • しかし、一番左から<<やる>、そして一番後ろに飛びます.しかし、一番右から>ということで前に進むことはありません.問題を誤って説明したので、最初の試みは失敗した.この点に注意さえすれば、簡単に解決できる.
  • nameを迂回して、Aが連続して出現した回数と開始インデックスをaList配列のオブジェクトに保存する(idx:~~~,cnt:~~).
  • Aは最も多い順序で並べられている.(前の0番のインデックスを比較するだけです.)
  • Aが次から次へと現れる最も多い中から回復するかどうかを決めなければなりません.
  • Aと前の文字数(保存されたインデックスを使用)の比較

  • 連続して現れるA数がもっと多いか同じなら、後退します.
    -(全長-A長-1)+(Aの前に現れる文字数-1).
    (Aがないと思った場合に行う)+(backをしたときに通ったこと)<-そう考えて表に記入すればいいと思います.

  • 前の数字がもっと多い場合は、直接行います.
    -(全長-1)
  • コード#コード#

    function solution(name) {
        let answer = 0;
        let aList =[]
        let turn =0
        for(const char of name){
            answer+=changeCharCount(char)
        }
        if(name[0]==="A") aList.push({idx:0,cnt:1})
        for(let i=1; i<name.length; i++){
            if(name[i-1]==="A" && name[i]==="A"){
                aList[aList.length-1].cnt++
            }else if(name[i-1]!=="A" && name[i]==="A"){
                aList.push({idx:i,cnt:1})
            }
        }
        aList.sort((a,b)=>b.cnt-a.cnt)
        //앞에 있는 개수보다 A개수가 더 많을때
        if(aList.length && aList[0].idx<=aList[0].cnt){
            turn = (name.length-aList[0].cnt-1)+(aList[0].idx-1)
        }else{
            turn = name.length-1
        }
        return answer+turn;
    }
    
    function changeCharCount (char){
        let charCode = char.charCodeAt()
        let start = 'A'.charCodeAt()
        const end = 'Z'.charCodeAt()
        return Math.min(end-charCode+1,charCode-start)
    }
    右側で>と叫んだ時に一番前に来たら…考え直すみたい
    幸いです.今回の問題もそうではないので、解決できます.😅