num이라는 배열이 있다고 가정합니다. 정확히 하나의 인덱스를 선택하고 해당 인덱스에서 요소를 제거할 수 있습니다. (요소의 인덱스는 제거 후에 변경될 수 있습니다). 홀수 인덱스 값의 합이 짝수 인덱스 값의 합과 같을 때 배열이 공정하다고 말할 수 있습니다. 제거 후 nums가 공정하도록 선택할 수 있는 인덱스 수를 찾아야 합니다.
따라서 입력이 nums =[5,3,7,2]와 같으면 출력은
-
인덱스 0에서 제거, 배열은 [3,7,2], 짝수 위치 합계:3+2 =5, 홀수 위치 합계 7(공평하지 않음)
-
인덱스 1에서 제거, 배열은 [5,7,2], 짝수 위치 합계:5+2 =7, 홀수 위치 합계 7(공정)
-
인덱스 2에서 제거, 배열은 [5,3,2], 짝수 위치 합계:5+2 =7, 홀수 위치 합계 3(공평하지 않음)
-
인덱스 3에서 제거, 배열은 [5,3,7], 짝수 위치 합계:5+7 =12, 홀수 위치 합계 3(공평하지 않음)
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- res :=0, sm1 :=0, sm2 :=0
- 범위 1에서 숫자 크기 - 1까지의 i에 대해
- 내가 짝수이면
- sm1 :=sm1 + 숫자[i]
- 그렇지 않으면
- sm2 :=sm2 + 숫자[i]
- 내가 짝수이면
- sm1이 sm2와 같으면
- res :=res + 1
- 범위 1에서 숫자 크기 - 1까지의 i에 대해
- 내가 홀수이면
- sm1 :=sm1 - 숫자[i] + 숫자[i-1]
- 그렇지 않으면
- sm2 :=sm2 - 숫자[i] + 숫자[i-1]
- sm1이 sm2와 같으면
- res :=res + 1
- 내가 홀수이면
- 반환 결과
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
def solve(nums):res, sm1, sm2 =0, 0, 0 for i in range(1, len(nums)):if i%2 ==1:sm1 +=nums[i] else:sm2 +=nums[i] if sm1 ==sm2:res +=1 for i in range(1, len(nums)):if i % 2 ==1:sm1 =sm1 - nums[i] + nums[i -1] else:sm2 =sm2 - nums[i] + nums[i-1] if sm1 ==sm2:res +=1 return resnums =[5,3,7,2]print(solve(nums))사전>입력
[5,3,7,2]출력
1