Laffee's blogu

August 15, 2021

주어진 문자의 자음별 개수를 구해주세요(코딩 테스트)

한글 문자 코드 = (초성 순서 * 21 * 28) + (중성 순서 * 28) + 종성 순서 + 0xAC00('가'의 유니코드)



문제 : 주어진 문자의 자음별 개수를 구해주세요.

input: "사과1호랑이,고니 수박BT닭"

output:

ㄱ:2 ㄴ:1 ㄷ:1 ㄹ:1 ㅁ:0 ㅂ:1 ㅅ:2 ㅇ:1 ㅈ:0 ㅊ:0 ㅋ:0 ㅌ:0 ㅍ:0 ㅎ:1



한글 자음 모음 영역 유니코드

https://www.unicode.org/charts/PDF/U1100.pdf


  • 초성(19) : ‘ㄱ’, ‘ㄲ’, ‘ㄴ’, ‘ㄷ’, ‘ㄸ’, ‘ㄹ’, ‘ㅁ’, ‘ㅂ’, ‘ㅃ’, ‘ㅅ’, ‘ㅆ’, ‘ㅇ’, ‘ㅈ’, ‘ㅉ’, ‘ㅊ’, ‘ㅋ’, ‘ㅌ’, ‘ㅍ’, ‘ㅎ’
  • 중성(21) : ‘ㅏ’, ‘ㅐ’, ‘ㅑ’, ‘ㅒ’, ‘ㅓ’, ‘ㅔ’, ‘ㅕ’, ‘ㅖ’, ‘ㅗ’, ‘ㅘ’, ‘ㅙ’, ‘ㅚ’, ‘ㅛ’, ‘ㅜ’, ‘ㅝ’, ‘ㅞ’, ‘ㅟ’, ‘ㅠ’, ‘ㅡ’, ‘ㅢ’, ‘ㅣ’
  • 종성(28) : 없음, ‘ㄱ’, ‘ㄲ’, ‘ㄳ’, ‘ㄴ’, ‘ㄵ’, ‘ㄶ’, ‘ㄷ’, ‘ㄹ’, ‘ㄺ’, ‘ㄻ’, ‘ㄼ’, ‘ㄽ’, ‘ㄾ’, ‘ㄿ’, ‘ㅀ’, ‘ㅁ’, ‘ㅂ’, ‘ㅄ’, ‘ㅅ’, ‘ㅆ’, ‘ㅇ’, ‘ㅈ’, ‘ㅊ’, ‘ㅋ’, ‘ㅌ’, ‘ㅍ’, ‘ㅎ’


한글 음절 유니코드

https://www.unicode.org/charts/PDF/UAC00.pdf


한글 문자 코드 = (초성 순서 * 21 * 28) + (중성 순서 * 28) + 종성 순서 + 0xAC00('가'의 유니코드)


문자열을 유니코드로 변환하는 법

'문자'.charCodeAt(0).toString(16);


Solution

const input = "사과1호랑이,고니 수박BT닭";

// 문제에서 제시한 것처럼 output을 만들기 위해 아래와 같이 미리 만들어두었습니다.
// 다만 쌍자음도 추가하였습니다.
const initialConsonant = [{ㄱ: 0}, {ㄲ: 0}, {ㄴ: 0}, {ㄷ: 0}, {ㄸ: 0}, {ㄹ: 0}, {ㅁ: 0}, {ㅂ: 0}, {ㅃ: 0}, {ㅅ: 0}, {ㅆ: 0}, {ㅇ: 0}, {ㅈ: 0}, {ㅉ: 0}, {ㅊ: 0}, {ㅋ: 0}, {ㅌ: 0}, {ㅍ: 0}, {ㅎ: 0}];


input.split("").forEach(elem => {
  const unicode = elem.charCodeAt(0).toString(16);

	// 한글 문자 코드는 위에서 보시는 것처럼 초성, 중성, 종성이 하나하나씩 결합하면서 그 순서대로 결정됩니다.
	// 그래서 위 공식을 해체하여 초성 순서를 계산하도록 했습니다.
  const order = Math.floor((parseInt(unicode, 16) - parseInt('AC00', 16)) / 21 / 28);
  

	// 한글 초성이 아닌 다른 것들의 유니코드는 아래 범위를 벗어납니다.
  if(order >= 0 && order < 19) {
    const property = Object.keys(initialConsonant[order])[0];
    initialConsonant[order][property] += 1;
  }
})




console.log(initialConsonant);

// result
[
  { 'ㄱ': 2 }, { 'ㄲ': 0 },
  { 'ㄴ': 1 }, { 'ㄷ': 1 },
  { 'ㄸ': 0 }, { 'ㄹ': 1 },
  { 'ㅁ': 0 }, { 'ㅂ': 1 },
  { 'ㅃ': 0 }, { 'ㅅ': 2 },
  { 'ㅆ': 0 }, { 'ㅇ': 1 },
  { 'ㅈ': 0 }, { 'ㅉ': 0 },
  { 'ㅊ': 0 }, { 'ㅋ': 0 },
  { 'ㅌ': 0 }, { 'ㅍ': 0 },
  { 'ㅎ': 1 }
]




레퍼런스


https://mingpd.github.io/2019/04/09/develop/unicode-hangle/

https://unicode-table.com/kr/blocks/hangul-syllables/

https://webisfree.com/2018-07-20/자바스크립트-unicode-string으로-변환하거나-알아내는-방법