abbreviateName.js (8kyu 49)

Codewars 알고리즘 풀이


Problem

  • Write a function to convert a name into initials.
    • 이름을 이니셜로 반환한다.
  • The output should be two capital letters with a dot seperating them.
    • 점으로 구분된 두 개의 대문자로 출력한다.


Solution 01

function abbreviateName(name) {
  let arr = name.split(' ');
  let firstName = arr[0];
  let lastName = arr[1];
  
  return `${firstName[0].toUpperCase()}.${lastName[0].toUpperCase()}`;
}

abbreviateName('Sam Azor');       // S.A
abbreviateName('sam azor');       // S.A
abbreviateName('Ralph Donovan');  // R.D
abbreviateName('ralph donovan');  // R.D

split() 메소드

문자열을 부분 문자열로 분할하고, 새 배열로 반환한다.

toUpperCase() 메소드

문자열을 대문자로 변환한다.


Solution 02

function abbreviateName(name) {
  let arr = name.split(' ');
  let firstInit = arr[0][0];
  let lastInit = arr[1][0];
  
  return `${firstInit.toUpperCase()}.${lastInit.toUpperCase()}`;
}

abbreviateName('Sam Azor');       // S.A
abbreviateName('sam azor');       // S.A
abbreviateName('Ralph Donovan');  // R.D
abbreviateName('ralph donovan');  // R.D


Solution 03

function abbreviateName(name) {
  return name.split(' ').map(i => i[0].toUpperCase()).join('.');
}

abbreviateName('Sam Azor');       // S.A
abbreviateName('sam azor');       // S.A
abbreviateName('Ralph Donovan');  // R.D
abbreviateName('ralph donovan');  // R.D

map() 메소드

배열 내 모든 element에 대해, 호출한 함수의 결과를 모아 새 배열로 반환한다.

join() 메소드

배열의 모든 element를 결합하고, 새 문자열로 반환한다.


Solution 04

function abbreviateName(name) {
  return name.match(/\b\w/g).join('.').toUpperCase();
}

abbreviateName('Sam Azor');       // S.A
abbreviateName('sam azor');       // S.A
abbreviateName('Ralph Donovan');  // R.D
abbreviateName('ralph donovan');  // R.D

정규표현식 (RegExp)

match(): 문자열에서 정규식과 일치하는 문자를 검색하고, 배열로 반환한다.

\b: 단어 경계에 대응

\w: 밑줄 문자를 포함한, 영숫자 문자에 대응 (= [A-Za-z0-9_])

g: 전역 검색