본문 바로가기

Algorithm/DP(Dynamic Programing)

(Python3) - LeetCode (Medium) : 3152. Special Array II

반응형

https://leetcode.com/problems/special-array-ii

부분합으로 해결한 문제였습니다.

📕 풀이방법

📔 입력 및 초기화

1. 어떤 그룹에 속해있는지 저장하기 위해 prefix_sum을 선언 후 nums의 길이만큼 초기화해줍니다. 

 

  • 같은 홀짝 쌍 누적 기록:
    prefix_sum 배열을 초기화하고, nums의 인접한 원소를 비교하여 홀짝이 같은 경우를 누적합니다.
    • 예: nums = [3, 4, 1, 2, 6]이라면 prefix_sum = [0, 0, 0, 0, 1]
      → 인덱스 4에서 2와 6이 같은 홀짝이므로 prefix_sum[4] = 1

 

2. 정답을 저장할 빈 배열 answer를 초기화합니다.

 

 

📔 풀이과정

 

1. 각 쿼리에 대해, query[0]부터 query[1] 구간에서 같은 홀짝인 쌍의 개수를 확인합니다.

 

2. prefix_sum[query[1]] - prefix_sum[query[0]] > 0이라면, 해당 구간에 같은 홀짝 쌍이 존재하므로 False를 추가합니다.

 

3. 그렇지 않다면 True를 추가합니다.

 

📔 정답 출력 | 반환

answer를 반환합니다.


📕 Code

📔 Python3

class Solution:
    def isArraySpecial(self, nums: List[int], queries: List[List[int]]) -> List[bool]:
        prefix_sum = [0] * len(nums)
        answer = []
        for i in range(1, len(nums)):
            if nums[i] % 2 == nums[i-1] % 2:
                prefix_sum[i] = prefix_sum[i-1] + 1
            else:
                prefix_sum[i] = prefix_sum[i - 1]

        for query in queries:
            if prefix_sum[query[0]] == prefix_sum[query[1]]:
                answer.append(True)
            else:
                answer.append(False)
        return answer

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