/**
* @param {string} sentence
* @return {string}
*/
var toGoatLatin = function(sentence) {
const arr = ['a', 'e', 'i', 'o', 'u'];
const a = sentence.split(' ');
return a.map((word, i) => arr.includes(word[0].toLowerCase()) ?
[...word, 'ma', ...Array(i + 1).fill('a')].join('')
:
[...word.slice(1), word[0], 'ma', ...Array(i + 1).fill('a')].join(''))
.join(' ');
};
풀이과정
주어진 문장을 나눈 후, 각 문자의 첫 단어가 'a', 'e', 'i', 'o', 'u'로 시작한다면
문자열 뒤에 'ma'와 단어가 끝날 때마다 'a'를 추가해주면 됐고
만약 문자의 첫 단어가 'a', 'e', 'i', 'o', 'u'가 아니라면, 첫 문자는 잘라서 기존 문자의 끝에 배치하고
그 뒤에 'ma'와 단어가 끝날 때마다 'a'를 추가해주면 해결할 수 있겠다는 생각이었습니다.
단어가 끝날 때마다 'a'를 하나씩 증가시켜 배치를 해주는 부분에서 고민을 좀 했는데요.
최근에 즐겨 사용하는 Array 생성자를 사용해 구현할 수 있겠다 싶었습니다.
문제를 다 풀고나서 다른 방식으로 'a'를 하나씩 증가시키는 다른 방법이 떠올랐는데요.
repeat 메서드를 사용해서 해결할 수도 있었습니다.
//이전 코드
...Array(i + 1).fill('a')
// 변경 코드
'a'.repeat(i+1)
런타임이 10ms 이상 줄어들은 걸 보고선 괜히 흐뭇하네요ㅎㅎ
'Algorithm' 카테고리의 다른 글
LEETCODE 1002. find-common-characters (0) | 2024.06.01 |
---|---|
LEETCODE 2331. Evaluate Boolean Binary Tree (0) | 2024.05.20 |
LEETCODE 1624. Largest Substring Between Two Equal Characters (0) | 2024.05.09 |
LEETCODE 908. Smallest Range I (0) | 2024.05.06 |
Leetcode 682. Baseball Game (0) | 2023.05.18 |