Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 공정한 배열을 만드는 방법을 찾는 프로그램

<시간/>

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