[programmers] 문자열 여러 번 뒤집기 - JavaScript
문자열과 이차원 정수 배열을 이용하여 주어진 명령을 순서대로 처리한 후의 문자열을 반환하는 문제입니다. 처음에는 문자열을 직접 변경하려고 했으나, 문자열은 immutable type이므로 변경이 불가능합니다. 따라서 문자열을 배열로 변환하여 처리한 후 다시 문자열로 변환하는 방식으로 문제를 해결할 수 있습니다.
Jan 07, 2024
Contents
처음 접근한 방식문제 설명
문자열
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번의
my_string
은 "rermgorpsam"이고 주어진queries
를 순서대로 처리하면 다음과 같습니다.
queries | my_string |
ㅤ | "rermgorpsam" |
[2, 3] | "remrgorpsam" |
[0, 7] | "progrmersam" |
[5, 9] | "prograsremm" |
[6, 10] | "programmers" |
따라서 "programmers"를 return 합니다.
처음 접근한 방식
solution.js
function solution(my_string, queries) { for(let i=0; i<queries.length; i++){ const [s,e] = queries[i]; for(j=s, k=e; j<=k; j++, k--){ const tmp = my_string[j]; my_string[j] = my_string[k]; my_string[k] = tmp; } } return my_string; }
이렇게 코드를 작성했을 때 처음 입력했던 my_string의 값이 변경되지 않는 문제가 발생했다.
이유를 찾아보니, 문자열 자료형은 immutable type이기 때문에 특정 인덱스의 값을 변경하는 것이 불가능했기 때문이다.
이 문제를 해결하기 위해 다음과 같이 코드를 작성했다.
solution.js
function solution(my_string, queries) { for (let i = 0; i < queries.length; i++) { const [s, e] = queries[i]; const my_string_array = my_string.split(''); // string을 array로 변환 for (let j = s, k = e; j <= k; j++, k--) { const tmp = my_string_array[j]; my_string_array[j] = my_string_array[k]; my_string_array[k] = tmp; } my_string = my_string_array.join(''); // array를 string으로 다시 변환 } return my_string; }
그 후 코드가 정상적으로 작동하는 것을 확인할 수 있었다.
핵심 키워드
- string 자료형은 immutable type이기 때문에 특정 인덱스의 값을 변경하는 것이 불가능하다. 하지만 유사 배열 객체이므로 값 참조와 length 메서드를 사용 가능하다.
- array 자료형은 인덱스를 통해 접근이 가능하며, 그 값을 참고하거나 변경할 수 있다.
결론!
해당 문제를 풀면서 string과 array 자료형의 성질에 대해 이해할 수 있었다.
Share article