class Solution:
def numWays(self, s: str) -> int:
countOne = 0
for num in s:
if num == "1":
countOne += 1
if countOne % 3 != 0: return 0
if countOne == 0: return ((len(s) - 1) * (len(s) - 2) // 2) % ( 10 ** 9 + 7 )
needOne = countOne // 3
countOne = 0
firstToSecond = 0
secondToThird = 0
for num in s:
if num == "1":
countOne += 1
if num == "0" and countOne == needOne:
firstToSecond += 1
if num == "0" and countOne == needOne * 2:
secondToThird += 1
return ((firstToSecond + 1) * (secondToThird+1)) % ( 10 ** 9 + 7 )
0과 1로 이루어진 string을 3분할 했을때 각 각 substring의 합이 서로 같을 수 있는 substring 조합의 갯수를 구하는 문제 입니다.
일단 1의 갯수를 구해서 3으로 나누어 떨어지지 않으면 합이 같은 3개의 substring으로 나눌수가 없다.
그리고 1의 갯수가 없을때는 0만으로 이루어진 string에서 substring 3개로 나누는 조합을 생각해야 합니다.
조합 만드는 방식
그리고 1의 갯수가 0보다 클때 경우의 수 생각하기