문제 설명 :
길이가 같은 문자열 배열 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를 잘라버리는 방법이었다.
+) 여기부터는 문제 풀면서 든 개인적 감상을 주절주절대는 글이므로, 코드를 보러 오셨다면 읽으실 필요 없습니다.
음!
갈 길이 멀다.
그래도 조금씩 나아가기는 하는 것 같으니까 다행이라 생각하기로 했다.
수업시간에 이론 배우고 예시를 실습으로 따라할 때는 분명 머리에 쏙쏙 들어가는 것 같은데 빠져나가기도 순식간이라는 생각이 든다.
반면에 직접 응용하기 위해 문서 찾아보고 오류를 맞닥뜨리며 익혀가는 것은, 체감상으로는 굉장히 얼레벌레 같지만ㅋㅋㅋㅋㅋㅋㅋ내가 스스로 해본 거여서 기억은 더 오래가는 것 같다.
그리고 이렇게 난리를 치며 짜고서 다른 사람이 짠 코드를 보면 타격감이 큰 만큼 배우기도 많이 배우게 되더라.
하지만 일단 이론을 배우고 나서 헤딩하는 게 맞는 순서라고 생각하기에 후회는 없다.
'코딩테스트 > 프로그래머스 기초 트레이닝' 카테고리의 다른 글
[Javascript] 날짜 비교하기 (0) | 2023.06.23 |
---|---|
[Javascript] 특이한 이차원 배열 1 (0) | 2023.06.13 |
[Javascript] 특이한 이차원 배열 2 - every() (0) | 2023.06.13 |
[Javascript] Set 객체 (0) | 2023.06.10 |
[Javascript] 0 떼기 (0) | 2023.06.06 |
[Javascript] for 반복문에서 i를 2씩 증가하는 법 (0) | 2023.06.06 |
[Javascript] l로 만들기 (0) | 2023.06.05 |
[Javascript] 배열의 원소만큼 추가하기 - new Array(), fill() (0) | 2023.05.27 |