오늘 뭐했냐/기억하면 좋을 문제들

문자 반복 출력 - .map(), .repeat()

스스로에게 2023. 5. 27. 16:56

문자열 my_string과 정수 n이 매개변수로 주어질 때, my_string에 들어있는 각 문자를 n만큼 반복한 문자열을 return 하도록 solution 함수를 완성해보세요.

나에 해석은 각 문자를 뽑아서 n번씩 배열에 넣고 그것을 풀자는 생각이었다 

function solution(my_string, n) {
    var answer = []; // answer = ''
    for(let i = 0; i < my_string.length; i++ ){
        for(let j = 0; j < n; j++){
            answer.push(my_string[i])
            // answer += my_string[i]
        }
    }
    return answer.join('');
    // answer
}

그 생각은 맞았고 일단 무사 통과는 했다

 

다만 다른 사람들의 풀이를 보면 push()를 사용할 필요 없이 주석처럼 문자열로 더해주면 되는 부분이었다

 

그리고 여기서 더 나아가면 repeat()를 사용하는데 방법은 다양하다

 

for of문과 reduce()를 사용하기도 하지만 가장 보기 쉽고 깔끔한 것은 이 방법이었다

function solution(my_string, n) {
    var answer = [...my_string].map(v => v.repeat(n)).join("");
    console.log(answer);
    return answer;
}
// [...my_string] 한 글자씩 배열의 인덱스에 순서대로 할당됨
// map(callback) 각 요소가 콜백 함수에 주어져 리턴값으로 새로운 배열 생성
// repeat(n) n 번만큼 그 문자를 반복한다 
// 각 문자가 n번만큼 반복된 문자열의 배열이 만들어진다

구조분해할당이라는 게 여러개의 변수 배열에 다른 배열의 각 요소를 할당하는

단순히 변수를 한 번에 여러개 선언할 수 있는 방법이라고만 생각을 했었는데

위 방법을 보고 아 저렇게 문자열을 배열 안에서 스프레드 문법으로 각 문자가 인덱스에 들어간

배열로 바꾸고 배열의 각 요소를 순서대로 매개변수로 전달할 수 있구나 하는 것을 알게되었다

=> 문자열을 분해하여 문자 하나 하나를 매개변수로 전달