문제: 사탕 담기

data_hamster·2023년 4월 13일
0

아이디어

  • 조건을 만족하는 경우의 수 구하기 문제
  • 중복을 허용하지 않는 모든 조합
  • 무게가 같은 다른 사탕도 주어지는지?

-> 실패. itertools 을 사용하여 weights 가 15 개인 경우를 계산하려니, 계산량이 엄청남.

  • 무게의 제한을 이용하여, weights 중 가장 무거운 무게부터 넣고 만들 수 있는 방법을 계산.

  • 주의: 모든 사탕이 평균에 가깝게 되면, 의미가 없음.

  • 제일 큰 수를 넣고, 그 다음 크기의 수를 넣고 .. 이런 느낌으로 해보자.

  • 하다가 안풀려서 인터넷 해설을 참고하였다 itertools의 combination을 갯수별로 생성하였다.

  • 그 후 그 조합의 합이 m과 같을 경우, 이를 리스트로 반환하였다.

나의 풀이

from itertools import combinations
m = 3000
weights = [500,1500,2500,1000,2000]

answer = []

for i in range(len(weights)):
    L = list(combinations(weights,i+1))
    for j in L:
        if m == sum(j):
            answer.append(list(j))

어려웠던 점

  • itertools 모듈에 익숙치 않아서 직접 조합을 구현하려고 하니 안되었음.
  • 이중 for 문이 답이 안될꺼라 생각하다 보니 더 돌아가게 된 것 같음.
profile
반갑습니다 햄스터 좋아합니다

0개의 댓글