단어 공부

문제

언어

  • 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));