본문 바로가기

프로그래밍/미분류

[Py] 숫자 리스트와 합이 주어졌을 때, 리스트의 합이 주어진 합인 부분 리스트 찾기

반응형
#-----------------------------------------------------
def is_in_list(lst, lstlst):
       lst.sort()
       bRet = False
       for e in lstlst:
               e.sort()
               if len(e) == len(lst):
                       bRet = True
                       for i in range(len(e)):
                               if e[i] != lst[i]:
                                       bRet = False
                                       break
       return bRet

#-----------------------------------------------------
def find_combination(sum, list):
#       print "---------"
#       print "-----------", sum, list, "------------"
       if len(list) == 0 or sum < 0:
               return []
       e = list[0]
       l = [ list[i] for i in range(1, len(list)) ]
       if e == sum:
               return [ [e] ]
       ret_list = []
       for ele in find_combination(sum-e, l):
               if not is_in_list([e] + ele, ret_list):
                       ret_list.append([ e ] + ele)
       for ele in find_combination(sum, l):
               if not is_in_list(ele, ret_list):
                       ret_list.append(ele)
       return ret_list

#-----------------------------------------------------
def summation(l):
       sum = 0
       for e in l:
               sum += e
       return sum

for e in find_combination(200, [ 10, 20, 20, 20, 30, 40, 50, 60, 60, 70 ]):
       print e, sum(e)
728x90