Algorithm

LEETCODE 824. Goat Latin

KANG_G1 2024. 5. 17. 23:58
/**
 * @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 이상 줄어들은 걸 보고선 괜히 흐뭇하네요ㅎㅎ