[programmers] 문자열 여러 번 뒤집기 - JavaScript

문자열과 이차원 정수 배열을 이용하여 주어진 명령을 순서대로 처리한 후의 문자열을 반환하는 문제입니다. 처음에는 문자열을 직접 변경하려고 했으나, 문자열은 immutable type이므로 변경이 불가능합니다. 따라서 문자열을 배열로 변환하여 처리한 후 다시 문자열로 변환하는 방식으로 문제를 해결할 수 있습니다.
Jan 07, 2024
[programmers] 문자열 여러 번 뒤집기 - JavaScript

문제 설명

문자열 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

More articles

See more posts

👨🏻‍💻DriedPollack's Blog