미스터카멜 코딩테스트 정리 글입니다
주어진 문자의 자음별 개수를 구해주세요. ( output의 결과로 봐선 초성을 의미하는 것 같습니다. )
input : "사과1호랑이,고니 수박BT닭"
output : ㄱ:2 ㄴ:1 ㄷ:1 ㄹ:1 ㅁ:0 ㅂ:1 ㅅ:2 ㅇ:1 ㅈ:0 ㅊ:0 ㅋ:0 ㅌ:0 ㅍ:0 ㅎ:1
전제 조건: input은 자음, 모음이 아닌 하나의 문자 형태로 들어온다.
'가'
의 유니코드를 찾습니다.'ㄱ'
의 경우, 첫 문자'가'
와 마지막 문자 '깋'
의 유니코드의 차이가 588
인 걸 알 수 있습니다. 즉, '가'
와 '까'
사이에 588
개의 서로 다른 문자가 있다는 것을 알 수 있습니다.'닿'
의 경우를 예시로 들면, '닿'
의 유니코드에서 '가'
의 유니코드를 뺀 값에 588
을 나눈 값은 자음 순서인 ㄱ, ㄲ, ㄴ, ㄷ 4번째이므로 나눈 값은 3이 나옵니다. ( ㄱ 자음이 0 )function getChosung(oneLetter) {
const chosung = [
"ㄱ",
"ㄲ",
"ㄴ",
"ㄷ",
"ㄸ",
"ㄹ",
"ㅁ",
"ㅂ",
"ㅃ",
"ㅅ",
"ㅆ",
"ㅇ",
"ㅈ",
"ㅉ",
"ㅊ",
"ㅋ",
"ㅌ",
"ㅍ",
"ㅎ",
];
// '가'의 유니코드
const korUniCodeValue = 44032;
let korUniCode = oneLetter.charCodeAt(0);
korUniCode = korUniCode - korUniCodeValue;
// 588의 의미 : ㄱ 부터 깋 까지의
let chosungIndex = parseInt(korUniCode / 588);
return chosung[chosungIndex];
}
function solution(input) {
const output = {
ㄱ: 0,
ㄴ: 0,
ㄷ: 0,
ㄹ: 0,
ㅁ: 0,
ㅂ: 0,
ㅅ: 0,
ㅇ: 0,
ㅈ: 0,
ㅊ: 0,
ㅋ: 0,
ㅌ: 0,
ㅍ: 0,
ㅎ: 0,
};
const oneLetterArr = input.split("");
oneLetterArr.forEach((oneLetter) => {
output[getChosung(oneLetter)]++;
});
console.log(output);
return output;
}
const input = "사과1호랑이,고니 수박BT닭";
solution(input);