CodeSignal - Arcade - reverseInParentheses

@p-iknow 🎹 · April 01, 2019

Problem
What I learned
My solution
Solution

Problem

image

What I learned

  • indexOf("str or num", "start index") 해당 함수의 두번째 인자의 활용방안
  • lastIndexOf 의 활용방안
  • substirng()
  • substing 대신 slice()를 쓰는 로직

My solution

const testcase = "foo(bar)baz(blim)"

function reverseInParentheses(string) {
    if(string.indexOf(")") < 0) return string;
    let reversedString, indexOfOpenParenth, indexOfCloseParenth, beforeParenth, afterParenth, parsedString;
    indexOfOpenParenth = string.lastIndexOf("(");
    indexOfCloseParenth = string.indexOf(")", string.lastIndexOf("("));
    beforeParenth = string.substring(0, indexOfOpenParenth);
    afterParenth = string.substring(indexOfCloseParenth +1);
    parsedString = string.substring(indexOfOpenParenth + 1, indexOfCloseParenth).split("").reverse().join("");

    return  reverseInParentheses(beforeParenth + parsedString + afterParenth)
}
reverseInParentheses(testcase);

Solution

const reverse = (str) => str.split('').reverse().join('');

const reverseParentheses = (s) => {
    while (s.includes('(')) {
        let l = s.lastIndexOf('(');
        let r = s.indexOf(')', s.lastIndexOf('('));
        s = s.slice(0, l) + reverse(s.slice(l + 1, r)) + (r + 1 === s.length ? s.slice(r, -1) : s.slice(r + 1));
    }
    return s;
};
@p-iknow 🎹
많은 것을 이해하고 싶습니다. 더 이해하기 위해 노력합니다.