코딩테스트/프로그래머스 기초 트레이닝

[Javascript] 부분 문자열 이어 붙여 문자열 만들기 - 구조분해

dev_swH 2023. 6. 6. 20:45

문제 설명 : 

길이가 같은 문자열 배열 my_strings와 이차원 정수 배열 parts가 매개변수로 주어집니다. parts[i]는 [s, e] 형태로, my_string[i]의 인덱스 s부터 인덱스 e까지의 부분 문자열을 의미합니다. 각 my_strings의 원소의 parts에 해당하는 부분 문자열을 순서대로 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요.

 

입출력 예 : 

["progressive", "hamburger", "hammer", "ahocorasick"] [[0, 4], [1, 2], [3, 5], [7, 7]] "programmers"

 

slice() 메소드를 쓰려면 2차원 배열인 parts의 각 요소 속 2번째 값마다 1씩 더해줘야 한다.

➡ parts부터 바꾼 다음에

➡ my_strings에 map()을 돌려서 각 문자열 요소를 자르고

➡ join()으로 합쳐야겠다.

 

이런 식의 논리를 짰는데 parts 배열의 값을 바꾸는 데 애를 많이 먹었다.

전개연산자를 활용해보겠다는 마음이 앞서서 구조분해할당을 생각해내지 못했던 것이다.

마침내 떠올리고 활용하여 만든

나의 풀이 :

function solution(my_strings, parts) {
    const v_change = parts.map(part => {
        let [a, b] = part;
        return [a, b+1];
    });
    return my_strings.map((str, idx) => str.slice(...v_change[idx])).join("");
}

 

그런데 다른 사람들의 풀이를 보니 훨씬 간단하게 짤 수 있었더라!!!

function solution(my_strings, parts) {
    return parts.map(([s, e], i) => {
        return my_strings[i].slice(s, e + 1)
    }).join('')
}

 

그냥 처음부터 map()의 value에다가 구조분해로 parts의 요소를 넣고

어차피 map은 새 배열을 반환하니까 parts.map() 안에서 바로 my_strings를 잘라버리는 방법이었다.

 

 


 

+) 여기부터는 문제 풀면서 든 개인적 감상을 주절주절대는 글이므로, 코드를 보러 오셨다면 읽으실 필요 없습니다.

 

음!

갈 길이 멀다.

그래도 조금씩 나아가기는 하는 것 같으니까 다행이라 생각하기로 했다.

수업시간에 이론 배우고 예시를 실습으로 따라할 때는 분명 머리에 쏙쏙 들어가는 것 같은데 빠져나가기도 순식간이라는 생각이 든다.

반면에 직접 응용하기 위해 문서 찾아보고 오류를 맞닥뜨리며 익혀가는 것은, 체감상으로는 굉장히 얼레벌레 같지만ㅋㅋㅋㅋㅋㅋㅋ내가 스스로 해본 거여서 기억은 더 오래가는 것 같다.

그리고 이렇게 난리를 치며 짜고서 다른 사람이 짠 코드를 보면 타격감이 큰 만큼 배우기도 많이 배우게 되더라.

하지만 일단 이론을 배우고 나서 헤딩하는 게 맞는 순서라고 생각하기에 후회는 없다.