문자열 여러번 뒤집기

도비김·2024년 2월 23일
0
문제 설명

문자열 my_string과 이차원 정수 배열 queries가 매개변수로 주어집니다. queries의 원소는 [s, e] 형태로, my_string의 인덱스 s부터 인덱스 e까지를 뒤집으라는 의미입니다. my_stringqueries의 명령을 순서대로 처리한 후의 문자열을 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

slice(),splice(), 문자열은 배열이 아니다!

function solution(my_string, queries) {
    var answer = my_string.split('');
    let result =''
    for(let x of queries){
        let num = x[1]-x[0]
        result=answer.slice(x[0],x[1]+1).reverse();
       answer.splice(x[0],num+1);
       answer.splice(x[0],0,...result)
    }
    return answer.join('');
}

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('');

function solution(my_string, queries) {
    return queries.reduce((arr, [s, e]) => {
        const words = arr.slice(s, e + 1)
        words.reverse()
        arr.splice(s, e - s + 1, ...words)
        return arr
    }, Array.from(my_string)).join('')
}

function solution(my_string, queries) {
    const str = [...my_string];
    queries.forEach(([s,e]) => {
        while(s < e) {
            [str[s], str[e]] = [str[e], str[s]];
            s++; e--;
        }
    })
    return str.join("");
}
profile
To Infinity, and Beyond!

0개의 댓글