reverseWords.js (7kyu 33)

Codewars 알고리즘 풀이


Problem

  • Complete the function that accepts a string parameter, and reverses each word in the string.
    • 문자열의 각 단어를 반전한다.
  • All spaces in the string should be retained.
    • 문자열의 모든 공백은 유지해야 한다.


Solution 01

function reverseWords(str) {
  let result = '';
  
  for (let i = str.length - 1; i >= 0; i--) {
    result += str[i];
  }
  return result.split(' ').reverse().join(' ');
}

reverseWords('a b c d');      // a b c d
reverseWords('How are you?'); // woH era ?uoy

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

reverse(): 배열 내 element의 순서를 반전한다.

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


Solution 02

function reverseWords(str) {
  return str.split(' ').map(i => i.split('').reverse().join('')).join(' ');
}

reverseWords('a b c d');      // a b c d
reverseWords('How are you?'); // woH era ?uoy

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


Solution 03

function reverseWords(str) {
  return str.replace(/\S+/g, i => [...i].reverse().join(''));
}

reverseWords('a b c d');      // a b c d
reverseWords('How are you?'); // woH era ?uoy

replace(): 대응되는 문자열을 찾아 다른 문자열로 치환한다.

\s: 하나의 공백에 대응

\S: 공백이 아닌, 하나의 문자에 대응

+: 1회 이상 연속으로 반복되는 부분에 대응

g: 전역 검색