문제 소개
JavaScript에서 문자열과 숫자 n을 입력받아, 원본 문자열에 포함된 모든 글자를 각각 n번씩 반복한 새로운 문자열을 반환하는 함수를 작성해야 합니다.
예를 들어, 입력 문자열이 다음과 같다고 가정해 보겠습니다.
const str = 'how are you'
여기서 n의 값이 2라면,
출력 결과
기대하는 출력은 다음과 같습니다.
const output = 'hhooww aarree yyoouu'
공백을 포함한 모든 문자가 각각 두 번씩 반복된 것을 확인할 수 있습니다.
해결 방법: String.prototype.repeat() 활용
이 문제는 JavaScript의 내장 메서드인 repeat()를 사용하면 매우 간단하게 해결할 수 있습니다. 문자열을 한 글자씩 순회하면서 각 문자를 n번 반복한 뒤 결과에 누적하는 방식입니다.
코드 구현
const str = 'how are you';
const repeatNTimes = (str, n) => {
let res = '';
for(let i = 0; i < str.length; i++){
// String.prototype.repeat() 함수 사용
res += str[i].repeat(n);
};
return res;
};
console.log(repeatNTimes(str, 2));
콘솔 출력
hhooww aarree yyoouu
코드 동작 원리
위 코드의 실행 흐름을 단계별로 살펴보면 다음과 같습니다.
- 결과 변수 초기화: 빈 문자열
res를 선언하여 최종 결과를 저장할 준비를 합니다. - 문자열 순회:
for반복문으로 문자열의 처음부터 끝까지 한 글자씩 접근합니다. - 문자 반복: 각 문자에 대해
repeat(n)을 호출하여 해당 문자를 n번 반복합니다. - 결과 누적: 반복된 문자를
res에 이어 붙입니다. - 결과 반환: 모든 문자 처리가 끝나면 완성된 문자열을 반환합니다.
대안: split(), map(), join() 조합
반복문 대신 함수형 스타일을 선호한다면 다음과 같이 더 간결하게 작성할 수도 있습니다.
const repeatNTimes = (str, n) =>
str.split('').map(char => char.repeat(n)).join('');
console.log(repeatNTimes('how are you', 2));
// hhooww aarree yyoouu
이 방식은 문자열을 배열로 분리한 후, 각 요소를 변환하고 다시 하나의 문자열로 합치는 과정을 거칩니다. 코드가 짧고 의도가 명확하게 드러난다는 장점이 있으며, 일반적인 입력 크기에서는 두 방식 모두 충분한 성능을 보입니다.
마무리
문자열의 각 글자를 n번 반복하는 문제는 repeat() 메서드의 존재만 알고 있다면 어렵지 않게 해결할 수 있습니다. 반복문 기반 방식과 split-map-join 방식 중 어떤 것을 선택할지는 팀의 코드 스타일과 가독성 기준에 따라 판단하면 됩니다.