-
[릿코드/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(''); };
조금은 간결해진것도 같다.
'코딩테스트' 카테고리의 다른 글
[릿코드 / js] 332. Reconstruct Itinerary (0) 2023.09.14 [릿코드/js] 151. reverse words in string (0) 2023.09.14 [릿코드/js] 605. can place flowers (0) 2023.09.13 [릿코드/js] 다시풀기 137.candy (0) 2023.09.13 [못풀었다/릿코드]2328. Number of Increasing Paths in a Grid (0) 2023.06.18