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

Python에서 일부 요소를 팝한 후 모든 스택의 최대 합계를 확인하는 프로그램

<시간/>

스택 목록이 있다고 가정하고 스택 또는 스택을 가져와서 원하는 수의 요소를 팝할 수 있습니다. 모든 스택이 동일한 합계 값을 갖도록 달성할 수 있는 최대 합계를 찾아야 합니다.

따라서 입력이 스택 =[[3, 4, 5, 6], [5, 6, 1, 4, 4], [10, 2, 2, 2] ]와 같으면 출력은 12가 됩니다. −

와 같은 작업을 수행할 수 있습니다.
  • 첫 번째 스택에서 [6]을 팝니다. [3, 4, 5] 합은 12입니다.

  • 두 번째 스택에서 [4,4]를 팝니다. [5, 6, 1] 합계는 12입니다.

  • 세 번째 스택에서 [2,2]를 팝니다. [10, 2] 합은 12입니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • 합계 :=빈 지도

  • 스택의 각 stk에 대해

    • s :=0

    • stk의 각 n에 대해 수행

      • s :=s + n

      • 합계[s] :=합계[s] + 1

  • 답변 :=0

  • 합계의 각 키 값 쌍(s, f)에 대해 수행

    • f>=스택 수이고 s> ans이면

      • 답변 :=s

  • 반환

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

from collections import defaultdict
class Solution:
   def solve(self, stacks):
      sums = defaultdict(int)
      for stk in stacks:
         s = 0
         for n in stk:
            s += n
            sums[s] += 1
         ans = 0
         for s, f in sums.items():
            if f >= len(stacks) and s > ans:
               ans = s
         return ans
ob1 = Solution()
stacks = [
   [3, 4, 5, 6],
   [5, 6, 1, 4, 4],
   [10, 2, 2, 2]
]
print(ob1.solve(stacks))

입력

stacks = [ [3, 4, 5, 6], [5, 6, 1, 4, 4], [10, 2, 2, 2] ]

출력

12