samcomi   2년 전

어느 부분이 틀렸는지 모르겠네요 ㅠ 확인해 주시면 감사하겠습니다 

ybc125   2년 전

for x in poss_comb:

for y in x:

sum_list.append(sum(y)) 여기에서

for y in x:를 제외하고 sum(x)로 해야 3가지로 무작위 조합된 리스트의 합이 나올 것으로 보입니다.

그리고 closest_number = min(sum_list, key=lambda z:abs(z-M)) 이렇게 쓰게 되면 M을 넘게되는 수인데도 가까운 수가 포함되어 있어서


import itertools

N, M = map(int,input().split())

given_cards = list(map(int,input().split()))

poss_comb = []

poss_comb.append(list(itertools.combinations(given_cards,3)))

sum_list = []

for x in poss_comb:
#애초에 M을 넘지 않는 수로 걸러서 합계를 받음

     if M - sum(x) >= 0:
            sum_list.append(sum(x))

          
#M을 넘지 않는 조합들이기 때문에 문제 없이 처리 됨

closest_number = min(sum_list, key=lambda z:abs(z-M)


print(closest_number)

한 번 채점 해 보시겠습니까

제 뇌피셜입니다^^

samcomi   2년 전

M값을 넘기지 않는 조건이 핵심이었네요 ^^ 

poss_comb 의 경우 print 하면 다음과 같아서...  예)예제2 입력 시 ==>  [[(93, 181, 245), (93, 181, 214), (93, 181, 315) ...  

for x in poss_comb: 그리고 for y in x:  둘 다 필요한거 같아요


아래와 같이 M값 관련 조건만 추가하면 되네요 


for x in poss_comb: 

   for y in x: 

      if M - sum(y) >= 0: 

        sum_list.append(sum(y))


빠른 답변 정말 감사합니다 ^~^ 좋은 하루 되세요

댓글을 작성하려면 로그인해야 합니다.