[伯俊/node.js]1157回単語を勉強する


質問する


アルファベットの大文字と小文字の単語を指定した場合は、この単語で最も使用されるアルファベットが何であるかを決定するプログラムを作成します.ただし、大文字と小文字は区別されません.

入力


最初の行には、アルファベットの大文字と小文字からなる単語が表示されます.与えられた単語の長さは10万を超えない.

しゅつりょく


最初の行は、この語で最も多く使われているアルファベットを大文字で出力します.しかし、最も使用頻度の高いアルファベットが複数存在する場合?出力します.

サンプルI/O


Mississipi/?
zZa/Z
baaa/A

に答える

const fs = require('fs');
let input = fs.readFileSync('input.txt').toString().split('\n');

solution(input[0])

function solution(str) {
    
    let lowStr = str.toLowerCase(); // 대소문자를 구분하지 않기 때문에 소문자로 변경,
    let obj = {}; // 문자를 key로 넣고 value를 count로 쓰기 위해 obj 만들어주고

    for(let i=0; i<lowStr.length; i++){
        
        if(obj[lowStr[i]] === undefined) {
            obj[lowStr[i]] = 1;  //key가 없을 땐 value를 1로 설정해서 넣어주고
        } else {
            obj[lowStr[i]] += 1 //key가 있으면 +1을 해주는 로직
        }
    }
    // obj는 for문으로 다 해결이 된거고,
   //이제 여기서 가장 높은 값을 가지는 property를 가려내야 한다
  
    let result ='';
    let count=0

    for(char in obj){ // obj 전체 property를 확인 해야 하므로 for in 사용
        if(obj[char] > count){ // count와 value 비교 해서 value가 더 크면
            count = obj[char]; // count값 교체해주고
            result = char.toUpperCase(); // result도 대문자로 변환해서 교체해준다.
        } else if (obj[char] === count){ //만약 count와 value가 같은 값이 있다면
            result ='?'; // result를 ?로 교체해준다.
        }
    }
    console.log(result);
}

感じる場所。


難しい問題ではありませんが、悩ましい問題です.
最初から相手を利用しようとは思っていなかったので、どうやってカウントするか悩んでいました.
このように繰り返される文字列は、オブジェクトをkeyに設定し、value countを使用すると便利です.
次にresult、count変数を設定して、オブジェクトのデータを使用します.
ifゲートで所望の値を抽出でき、使い勝手が非常に便利です.
後で繰り返されるものを抽出するために、対象を並べるよりも!
これを必ず覚えてください.