[POB#21] Assignment 5 : 코딩테스트 정리

dongwon·2021년 8월 16일
1

원티드-프리온보딩

목록 보기
15/25
post-thumbnail

Assignment 5 : 코딩테스트

미스터카멜 코딩테스트 정리 글입니다

문제

주어진 문자의 자음별 개수를 구해주세요. ( output의 결과로 봐선 초성을 의미하는 것 같습니다. )

input : "사과1호랑이,고니 수박BT닭"
output : ㄱ:2 ㄴ:1 ㄷ:1 ㄹ:1 ㅁ:0 ㅂ:1 ㅅ:2 ㅇ:1 ㅈ:0 ㅊ:0 ㅋ:0 ㅌ:0 ㅍ:0 ㅎ:1

구현 방법

전제 조건: input은 자음, 모음이 아닌 하나의 문자 형태로 들어온다.

  1. 문자의 유니코드를 이용합니다. 한 글자의 규칙을 찾아 초성의 인덱스를 찾습니다.
  2. 하나의 문자 중 최초인 '가'유니코드를 찾습니다.
  3. 'ㄱ'의 경우, 첫 문자'가'와 마지막 문자 '깋'유니코드의 차이가 588인 걸 알 수 있습니다. 즉, '가''까' 사이에 588개의 서로 다른 문자가 있다는 것을 알 수 있습니다.
  4. 따라서 '닿' 의 경우를 예시로 들면, '닿'유니코드에서 '가'유니코드를 뺀 값에 588을 나눈 값은 자음 순서인 ㄱ, ㄲ, ㄴ, ㄷ 4번째이므로 나눈 값은 3이 나옵니다. ( ㄱ 자음이 0 )
  5. 자음들을 미리 배열로 만든 후 연산의 결과로 얻은 값은 인덱스로 활용해 +1 하는 식으로 구현합니다.
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);

참고 사이트

profile
데이원컴퍼니 프론트엔드 개발자입니다.

0개의 댓글