🔖 문제 설명
문자열 my_string
과 이차원 정수 배열 queries
가 매개변수로 주어집니다. queries
의 원소는 [s, e] 형태로, my_string
의 인덱스 s부터 인덱스 e까지를 뒤집으라는 의미입니다. my_string
에 queries
의 명령을 순서대로 처리한 후의 문자열을 return 하는 solution 함수를 작성해 주세요.
⛔ 제한사항
my_string
은 영소문자로만 이루어져 있습니다.- 1 ≤
my_string
의 길이 ≤ 1,000 queries
의 원소는 [s, e]의 형태로 0 ≤ s ≤ e <my_string
의 길이를 만족합니다.- 1 ≤
queries
의 길이 ≤ 1,000
📋 입출력 예시
my_string | queries | result |
"rermgorpsam" | [[2, 3], [0, 7], [5, 9], [6, 10]] | "programmers" |
🔖 입출력 예 설명
입출력 예 #1
- 예제 1번의
my_string
은 "rermgorpsam"이고 주어진queries
를 순서대로 처리하면 다음과 같습니다.
queries | my_string |
"rermgorpsam" | |
[2, 3] | "remrgorpsam" |
[0, 7] | "progrmersam" |
[5, 9] | "prograsremm" |
[6, 10] | "programmers" |
따라서 "programmers"를 return 합니다.
🧾 기본 제공 코드
function solution(my_string, queries) {
var answer = '';
return answer;
}
🗳️ 직접 풀이한 코드
function solution(my_string, queries) {
const mix = ([start, end]) => {
const slice = my_string.split('').slice(start, end + 1).reverse();
const arr = my_string.split('');
arr.splice(start, slice.length, ...slice);
my_string = arr.join('');
}
for (let i = 0; i < queries.length; i++) {
const element = queries[i];
mix(element);
}
return my_string;
}
이번 문제의 출제 의도는 1️⃣문자열을 배열로, 배열을 문자열로 변환할 줄 아는지와 2️⃣변환된 배열 값 중 추출하기 위해 사용한 내장객체 메서드가 원본 데이터에 영향을 미치는지 안미치는지에 대한 분별력이 있는지를 확인하기 위한 문제인 것으로 보였다.
기존에 알고 있던 지식을 바탕으로 위와 같이 풀이를 진행하였다.
.slice()
메서드는 원본에 영향을 미치지 않는다. 얕은 복사본을 새로운 배열 객체로 반환하고, 원본 배열은 바뀌지 않는다.
.splice()
메서드는 배열의 기존 요소를 삭제 또는 교체하거나 새 요소를 추가하여 배열의 내용을 변경한다. 한 마디로 원본 배열에 영향을 미치고 변형을 가져온다.
따라서 배열 값 추출의 목적으로 사용한다면 원본 데이터에 영향이 가지 않는 .slice() 메서드를 활용하고, 배열 값 그대로를 변형시켜 기존 요소를 삭제 또는 교체하거나 추가하는 목적으로 활용하기 위해서는 .splice() 메서드를 활용하면 된다.
🗳️ 다른 사람이 풀이한 코드
function solution(my_string, queries) {
let str = my_string.split('');
queries.forEach(([start, end]) => {
const changeStr = str.slice(start, end + 1);
str.splice(start, changeStr.length, ...changeStr.reverse());
});
return str.join('');
}
💬 마치며
①내장객체 메서드 활용의 중요성과 ②문자열을 배열로, 배열을 문자열로 변환하기 위해 활용해야하는 메서드와 마지막으로 ③.slice()
메서드와 .splice()
메서드의 차이를 이해하고 적재적소 필요한 곳에 활용할 줄 알아야함을 이해하였다.
🔸 작성된 본문 내용 중 미흡한 부분이 있을 수 있습니다.
🔸 고칠 부분이나 추가되면 좋을 내용 댓글로 남겨주시면 완성도 높은 글을 만들어가는 데에 큰 힘이 됩니다. ☺️
'프로그래머스 > 코딩문제' 카테고리의 다른 글
[프로그래머스] Lv.0 피자 나눠 먹기 (3) (1) | 2024.02.19 |
---|---|
[프로그래머스] Lv.0 배열 만들기 5 (1) | 2024.01.30 |
[프로그래머스/JS] Lv.1 비밀지도 (0) | 2023.11.16 |
[프로그래머스] Lv.0 코드 처리하기 (0) | 2023.10.20 |
[프로그래머스] Day5 할당량 완료하기 (1) | 2023.10.20 |