【JavaScript】白駿1157号:単語学習


ソース

1157:単語学習(acmicpc.net)
質問する
アルファベットの大文字と小文字の単語を指定した場合は、この単語で最も使用されるアルファベットが何であるかを決定するプログラムを作成します.ただし、大文字と小文字は区別されません.
入力
最初の行には、アルファベットの大文字と小文字からなる単語が表示されます.与えられた単語の長さは10万を超えない.
しゅつりょく
最初の行は、この語で最も多く使われているアルファベットを大文字で出力します.しかし、最も使用頻度の高いアルファベットが複数存在する場合?出力します.
入力例1
Mississipi
サンプル出力1
?
入力例2
zZa
サンプル出力2
Z
入力例3
z
サンプル出力3
Z
入力例4
baaa
サンプル出力4
A
コード#コード#
Math.max.apply()関数
const fs = require('fs');
const input = fs.readFileSync("/dev/stdin").toString().toUpperCase();

let alphabet = new Array(26).fill(0);

for (let i=0; i<input.length; i++) { // 단어에서 사용된 알파벳의 개수 count
    alphabet[input.charCodeAt(i)-65]++; // 대문자 A의 아스키 코드는 65
}

let max= Math.max.apply(null, alphabet);
let maxIdx = alphabet.indexOf(max);

let cnt = 0;
for (let i=0; i<alphabet.length; i++) {
    if (max==alphabet[i]) {
        cnt++;
        if(cnt>1) { break; }
    }
}

if(cnt==1) {
    console.log(String.fromCharCode(maxIdx+65));
}
else { // cnt>1
    console.log("?");
}