스택 목록이 있다고 가정하고 스택 또는 스택을 가져와서 원하는 수의 요소를 팝할 수 있습니다. 모든 스택이 동일한 합계 값을 갖도록 달성할 수 있는 최대 합계를 찾아야 합니다.
따라서 입력이 스택 =[[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