코딩테스트
[릿코드/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('');
};
조금은 간결해진것도 같다.