BOJ[1157] - 단어 공부 by JavaScript
단어 공부
문제
언어
- JavaScript
문제 풀이 step 1
- 문제에서 대소문자 구분을 하지 않는다고 했으므로 우선 입력 문자열을 모두 대문자나 소문자로 변환합니다. (저는 대문자로 했습니다.)
- 그리고 ‘A’ ~ ‘Z’의 개수를 담을 수 있게 크기가 26인 배열을 준비합니다.
- String.charCodeAt 함수를 이용해서 각 문자를 숫자화 하고, ‘A’의 코드값을 빼줌으로써 인덱스화 해줍니다.
- 인덱스화 한 값을 이용해서 쉽게 알파벳의 개수를 세어줍니다.
- 배열을 순회하며 가장 많이 등장한 알파벳을 찾습니다.
- 가장 많이 등장한 알파벳이 여러개일 경우에 대한 예외처리를 해줍니다.
소스 코드
const input = require("fs").readFileSync("/dev/stdin").toString().split("\n");
const solution = (input) => {
const str = input[0].toUpperCase();
const countArr = Array(26).fill(0);
// 각 알파벳 횟수를 countArr에 저장
for (let i = 0; i < str.length; i++) {
const index = str.charCodeAt(i) - "A".charCodeAt(0);
countArr[index]++;
}
// 가장 많이 사용된 알파벳 찾기
let max = 0;
let ans = "";
for (let i = 0; i < 26; i++) {
if (max < countArr[i]) {
max = countArr[i];
ans = String.fromCharCode(i + "A".charCodeAt(0));
}
}
// 가장 많이 사용된 알파멧이 여러 개 존재하는지
if (countArr.filter((v) => v === max).length > 1) return "?";
else return ans;
};
console.log(solution(input));