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
*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.
'Algorithm > DP(Dynamic Programing)' 카테고리의 다른 글
(Python3) - LeetCode (Medium) : 2270. Number of Ways to Split Array (2) | 2025.01.03 |
---|---|
(Python3) - LeetCode (Medium) : 2466. Count Ways To Build Good Strings (0) | 2024.12.31 |
(Python3) - LeetCode (Hard) : 1639. Number of Ways to Form a Target String Given a Dictionary (0) | 2024.12.29 |
(Python3) - LeetCode (Medium) : 3152. Special Array II (1) | 2024.12.09 |
(Python3) - 백준(BOJ) 21758 : 꿀 따기 (0) | 2024.11.13 |