capitalize.js (7kyu 81)

Codewars 알고리즘 풀이


Problem

  • Given a string and an array of integers representing indices, capitalize all letters at the given indices.
    • 문자열과 정수의 배열이 주어진다.
    • 주어진 색인의 모든 문자를 대문자로 변경한다.
  • The input will be a lowercase string with no spaces and an array of digits.
    • 입력은 공백이 없는 소문자 문자열과 숫자 배열이다.


Solution 01

function capitalize(str, arr) {
  str = str.split('');
  
  for (let i = 0; i < str.length; i++) {
    for (let j = 0; j < arr.length; j++) {
      if (i === arr[j]) {
        str[i] = str[i].toUpperCase();
      }
    }
  }
  return str.join('');
}

capitalize('code', [0]);     // Code
capitalize('code', [3]);     // codE
capitalize('code', [0, 1]);  // COde
capitalize('code', [0, 2]);  // CoDe
capitalize('code', [0, 3]);  // CodE
capitalize('code', [2, 3]);  // coDE

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

toUpperCase(): 문자열을 대문자로 변환한다.

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


Solution 02

function capitalize(str, arr) {
  return str.split('').map((i, index) => (arr.includes(index) ? i.toUpperCase() : i)).join('');
}

capitalize('code', [0]);     // Code
capitalize('code', [3]);     // codE
capitalize('code', [0, 1]);  // COde
capitalize('code', [0, 2]);  // CoDe
capitalize('code', [0, 3]);  // CodE
capitalize('code', [2, 3]);  // coDE

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

includes(): 특정 값이 있는지 확인하고, true/false를 반환한다.


Solution 03

function capitalize(str, arr) {
  return [...str].map((i, index) => arr.includes(index) ? i.toUpperCase() : i).join('');
}

capitalize('code', [0]);     // Code
capitalize('code', [3]);     // codE
capitalize('code', [0, 1]);  // COde
capitalize('code', [0, 2]);  // CoDe
capitalize('code', [0, 3]);  // CodE
capitalize('code', [2, 3]);  // coDE