본문 바로가기

Algorithm/DP(Dynamic Programing)

(Python3) - LeetCode (Medium) : 2559. Count Vowel Strings in Ranges

반응형

https://leetcode.com/problems/count-vowel-strings-in-ranges

prefix sum(누적합) 문제였습니다.

📕 풀이방법

📔 입력 및 초기화

정답 배열 ans, 각 단어별 vowel str이 모음인지 여부를 저장할 배열 is_word_vowel을 선언 후 빈 배열로 초기화합니다.

📔 풀이과정

1. 각 단어의 처음과 끝이 모음인지 여부를 반환하는 함수 is_vowel_str을 선언 후 각 단어별로 호출해 결과를 is_word_vowel에 append해줍니다.

 

2. 누적합 vowel_str_sum을 선언 후 word의 길이만큼 순회하며 i번째 index까지의 vowel str개수를 구해 저장합니다.

 

3. queries정보를 순회하며 다음을 진행합니다.

  3-1. 각 query의 정보는 시작 index, 끝 index이므로 누적합으로는

끝 index까지의 누적된 vowel str 개수 -  (시작 index - 1) 까지의 누적된 vowel str 개수

로 표현할 수 있습니다. 시작 index가 0이라면 단순 is_vowel_str의 끝 index값만 구하면 되므로 분기처리를 해줍니다.

 

  3-2. start_index, end_index의 지역변수를 선언후 표현하게 되면 start_index가 0이 아니라면 vowel_str_sum[end_index] - vowel_str_sum[start_index-1], 맞다면 vowel_str_sum[end_index]를 ans에 append해줍니다.

📔 정답 출력 | 반환

ans를 반환합니다.


📕 Code

📔 Python3

class Solution:
    def vowelStrings(self, words: List[str], queries: List[List[int]]) -> List[int]:
        ans = []
        is_word_vowel = []

        def is_vowel_str(s):
            vowel_set = set(('a','e','i','o','u'))
            return s[0] in vowel_set and s[-1] in vowel_set

        for word in words:
            if is_vowel_str(word):
                is_word_vowel.append(1)
            else:
                is_word_vowel.append(0)

        vowel_str_sum = [0] * len(words)
        vowel_str_sum[0] = is_word_vowel[0]
        for i in range(1, len(words)):
            vowel_str_sum[i] = vowel_str_sum[i-1] + is_word_vowel[i]

        for query in queries:
            start_index = query[0]
            end_index = query[1]
            if start_index == 0:
                ans.append(vowel_str_sum[end_index])
            else: 
                ans.append(vowel_str_sum[end_index] - vowel_str_sum[start_index-1])
                
        return ans

*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.