
알파벳 대소문자, 숫자, 구분자로 이루어진 문장 s가 있습니다.
문장은 구분자를 기준으로 단어를 구분하며, 구분자는 마침표, 쉼표, 느낌표, 물음표, 스페이스 (공백)으로 구성됩니다.
문장 s 의 각 단어를 거꾸로 뒤집어서 배열을 출력하세요.
단, 구분자가 연속으로 나타날 경우 그 안에 단어는 없다고 가정하세요.
s는 1 이상 1000 이하입니다.
여러가지 구분자를 사용하여 문자열을 나누는 방법은, 정규표현식을 이용하는 것입니다.
정규표현식은 이와 같이 구성됩니다. → /regerxr/i
/ 기호 사이에 패턴을 넣고, 플래그(i)를 추가합니다.
자세한 내용은 위의 링크에 정리되어 있습니다.
간단히 말하자면, 괄호 안에 구분자를 넣고, 이중 하나 이상이 나오는 부분을 구분자로 인식하라는 의미입니다.
정규표현식은 마침표(.), 쉼표(,), 느낌표(!), 물음표(?), 스페이스(\s) 중 하나 이상이 나오는 부분을 구분자로 인식합니다.
주어진 문장을 구분자로 구분하여 split 메서드를 이용하여 새로운 변수 sentence에 넣습니다.
console.log(sentence); // ['Hello', 'World', ' ']
빈 단어는 없기 때문에 공백을 필터링해줘야 합니다.
let filtering = sentence.filter(str => str !== '');
filtering 이라는 변수를 만들어, sentence의 각 요소를 str로 간주하고 공백이 아닌 것만 넣습니다.
문자열을 뒤집는 방법은 for 루프를 사용하거나, map 함수를 이용하는 방법 등이 있습니다.
먼저 for문을 사용하는 방법은 아래와 같습니다.
let filtering = ['Hello', 'World'];
const reverse = [];
for (let str of filtering) {
reverse.push(str.split('').reverse().join(''));
}
우선 빈 배열을 선언한 후, for문을 이용해 filtering의 각 단어를 돌면서 반복합니다. 각 단어를 하나씩 쪼개어 순서를 바꾸고 다시 합친 후, 만들었던 빈 배열에 넣습니다.
다음으로 map 함수를 이용하면 조금 더 쉽게 만들 수 있습니다.
let filtering = ['Hello', 'World'];
const reverse = filtering.map(str => [...str].reverse().join(''));
각 단어를 str이라는 인수로 받은 후, 각 문자의 배열로 분해하여 순서를 바꾸고, 합쳐서 새 배열 reverse로 반환합니다.
function solution(s) {
let separators = /[.,!?\s]+/;
let sentence = s.split(separators);
let filtering = sentence.filter(str => str !== '');
let reverse = filtering.map(str => [...str].reverse().join(''));
return reverse;
}
const result = solution("Hello, World?!");
위의 과정을 모두 합치면 이와 같습니다. filter 부분과 reverse 부분은 아래와 같이 합칠 수 있습니다.
let reverse = sentence.filter(str => str !== '').map(str => [...str].reverse().join(''));