Algorithm/BaeKJoon
[JS][백준]1157_단어 공부
JaeKwan
2021. 8. 5. 23:10
문제 번호
1157번: 단어 공부
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
www.acmicpc.net
알고리즘 분류
구현, 문자열
문제 풀이
각 알파벳의 개수를 새어줄 alpha라는 배열을 생성한다.
각 대문자 소문자 알파벳의 아스키 코드를 이용하여 대문자일때, 소문자 일때로 나누어서 개수를 구한다.
// A = 65 Z = 90 a = 97 z = 122
for (let i = 0; i < S.length; i++) {
// 대문자일 경우.
if (65 <= S.charCodeAt(i) && S.charCodeAt(i) <= 90)
alpha[S.charCodeAt(i) - Number(65)]++;
// 소문자일 경우.
else if (97 <= S.charCodeAt(i) && S.charCodeAt(i) <= 122)
alpha[S.charCodeAt(i) - Number(97)]++;
}
이후 가장 많이 등장한 알파벳을 구한다.
for (let i = 0; i < alpha.length; i++) {
if (Number(alpha[i]) > Max) {
Max = Number(alpha[i]);
answer = i;
}
}
마지막으로 가장 많이 등장한 알파벳이 여러개 있는지 count 변수를 이용하여 확인해본다.
for (let i = 0; i < alpha.length; i++) {
if (alpha[i] === Max)
count++;
}
전체코드
const readline = require('readline');
let rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let input = [];
rl.on('line', function (line) {
input.push(line);
});
rl.on('close', function () {
Solution(input)
})
function Solution(input) {
let answer = 0;
let alpha = Array(26).fill(0);
let S = String(input[0]);
// A = 65 Z = 90 a = 97 z = 122
for (let i = 0; i < S.length; i++) {
// 대문자일 경우.
if (65 <= S.charCodeAt(i) && S.charCodeAt(i) <= 90)
alpha[S.charCodeAt(i) - Number(65)]++;
// 소문자일 경우.
else if (97 <= S.charCodeAt(i) && S.charCodeAt(i) <= 122)
alpha[S.charCodeAt(i) - Number(97)]++;
}
let Max = 0;
let count = 0;
for (let i = 0; i < alpha.length; i++) {
if (Number(alpha[i]) > Max) {
Max = Number(alpha[i]);
answer = i;
}
}
for (let i = 0; i < alpha.length; i++) {
if (alpha[i] === Max)
count++;
}
if (count >= 2) console.log('?');
else console.log(String.fromCharCode(answer + 65));
}
특이사항
문자열.fromCharCode를 이용하면 아스키코드를 문자로 바꿀 수 있다.