ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [릿코드/js] 다시풀기 345
    코딩테스트 2023. 9. 13. 23:19
    var reverseVowels = function(s) {
        let vowelstr = "aeiouAEIOU"
        let vowelobj = {};
        vowelstr.split('').forEach((el,idx) => vowelobj[el] = true);
        let vowels = [];
        let output = "";
        for (let i = 0; i < s.length; i++)
        {
            if (vowelobj[s[i]])
                vowels.push(s[i]);
        }
        vowels = vowels.reverse();
        let j = 0;
        for (let i = 0; i < s.length; i++)
        {
            if (vowelobj[s[i]])
            {
                output += vowels[j];
                j++;
            }
            else output += s[i];
        }
        return output;
    };

    -> 처음 푼 풀이. 모음만 따로 저장해놓고 그 친구들 뒤집은 다음에 새로운 문자열을 만들어냈다.

     

    var reverseVowels = function(s) {
        let vowelstr = "aeiouAEIOU"
        let vowelobj = {};
        vowelstr.split('').forEach((el,idx) => vowelobj[el] = true);
        let output = s.split('');
        let start = 0;
        let last = s.length - 1;
        while (start < last)
        {
            while (!vowelobj[s[start]] && start < last) start++;
            while (!vowelobj[s[last]] && start < last) last--;
            if(vowelobj[s[start]] && vowelobj[s[last]] && start < last)
            {
            const tmp = output[start];
            output[start] = output[last];
            output[last] = tmp;
            start++;
            last--;
            }
        }
        return output.join('');
    };

    -> 두번째 푼 풀이. 양쪽에 인덱스를 놓고, 그 친구들을 뒤집으면 된다고 생각했지만 매번 start < last가 있어 보기에도 안좋고 성능도 잘 안나옴.

     

    var reverseVowels = function(s) {
        let vowelstr = "aeiouAEIOU"
        let vowelobj = {};
        vowelstr.split('').forEach((el,idx) => vowelobj[el] = true);
        let output = s.split('');
        let start = 0;
        let last = s.length - 1;
        while (start < last)
        {
            if (!vowelobj[s[start]]) start++;
            if (!vowelobj[s[last]]) last--;
            if (vowelobj[s[start]] && vowelobj[s[last]])
            {
                let tmp = output[start];
                output[start] = tmp;
                output[start] = output[last];
                output[last] = tmp;
                start++;
                last--;
            }
        }
        return output.join('');
    };

    조금은 간결해진것도 같다.

     

     

Designed by Tistory.