[Assignment 5 알고리즘] 미스터카멜 - 주어진 문자의 자음별 개수를 구해주세요
🔗 노션 링크
📑 과제 내용
주어진 문자의 자음별 개수를 구해주세요.
- input: "사과1호랑이,고니 수박BT닭"
- output:
ㄱ:2
ㄴ:1
ㄷ:1
ㄹ:1
ㅁ:0
ㅂ:1
ㅅ:2
ㅇ:1
ㅈ:0
ㅊ:0
ㅋ:0
ㅌ:0
ㅍ:0
ㅎ:1
🔰 자바스크립트 코드 작성
const input = "사과1호랑이,고니 수박BT닭";
const BASE_INDEX = '가'.charCodeAt(0);
const CHOSUNG_LIST = ['ㄱ', 'ㄲ', 'ㄴ', 'ㄷ', 'ㄸ', 'ㄹ', 'ㅁ', 'ㅂ', 'ㅃ', 'ㅅ', 'ㅆ', 'ㅇ', 'ㅈ', 'ㅉ', 'ㅊ', 'ㅋ', 'ㅌ', 'ㅍ', 'ㅎ'];
const OUTPUT_LIST = ['ㄱ', 'ㄴ', 'ㄷ', 'ㄹ', 'ㅁ', 'ㅂ', 'ㅅ', 'ㅇ' , 'ㅈ', 'ㅊ', 'ㅋ', 'ㅌ', 'ㅍ', 'ㅎ'];
const answer = (input) => {
const CHOSUNG = input
.replace(/[^ㄱ-ㅎ가-힣]/g, "")
.split("")
.map((str) => CHOSUNG_LIST[parseInt((str.charCodeAt(0) - BASE_INDEX) / 588)]);
return OUTPUT_LIST.reduce((acc, cur) => {
acc[cur] = CHOSUNG.filter((str) => str === cur).length;
return acc;
}, {});
};
answer(input);
// {
// 'ㄱ': 2,
// 'ㄴ': 1,
// 'ㄷ': 1,
// 'ㄹ': 1,
// 'ㅁ': 0,
// 'ㅂ': 1,
// 'ㅅ': 2,
// 'ㅇ': 1,
// 'ㅈ': 0,
// 'ㅊ': 0,
// 'ㅋ': 0,
// 'ㅌ': 0,
// 'ㅍ': 0,
// 'ㅎ': 1
// }
🔰 풀이과정 해설
-
replace(/^ㄱ-ㅎ가-힇/g, "")
: 한글 외 다른 문자열을 제외한다. -
split("")
: 문자열을 한 글자씩 배열로 바꾼다. -
map((str) => CHOSUNG_LIST[parseInt((...)])
:
[ '사', '과', '호', '랑', '이', '고', '니', '수', '박', '닭' ]에 대한 초성을 뽑아내야 한다.- 한글 유니코드에서 시작은 '가'로
'가'.charCodeAt(0)=44032
값이다. - '가' 다음 '까'는
'까'.charCodeAt(0)=44620
로,
가 → 까 초성은588(=44620-44032)
주기로 변경된다. - 현재 문자열에 대한 초성을 알아내기 위해
str.charCodeAt(0)
에서'가'.charCodeAt(0)
를 빼고 초성 주기 588을 나눠 현재 문자열이CHOSUNG_LIST
에 어디에 해당하는지 구한다. - 결과로 문자열에 대한 초성 값이 배열로 받아진다.
- 한글 유니코드에서 시작은 '가'로
-
OUTPUT_LIST.reduce((acc, cur) => {...}, {})
:
[ 'ㅅ', 'ㄱ', 'ㅎ', 'ㄹ', 'ㅇ', 'ㄱ', 'ㄴ', 'ㅅ', 'ㅂ', 'ㄷ' ]를 결과 형식에 맞게 카운트를 계산해줘야 한다.- 'ㄲ', 'ㄸ', 'ㅃ', 'ㅆ', 'ㅉ' 5가지는 정답 output에 없어서
OUTPUT_LIST
변수를 따로 만들었다. reduce
함수를 통해CHOSUNG
변수에서 현재 초성이 몇 개 있는지 확인해주면 된다!
- 'ㄲ', 'ㄸ', 'ㅃ', 'ㅆ', 'ㅉ' 5가지는 정답 output에 없어서
Author And Source
이 문제에 관하여([Assignment 5 알고리즘] 미스터카멜 - 주어진 문자의 자음별 개수를 구해주세요), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@daeun-react/Assignment-5-미스터카멜-주어진-문자의-자음별-개수를-구해주세요저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)