백준 문제풀이/브루트포스(Bruteforce)

백준 온라인 저지 - 블랙잭(#2798) 파이썬

Itscool 2021. 8. 12. 20:45

문제설명

브루트포스는 조합 가능한 모든 경우의 수를 하나씩 검사하는 방법입니다. 이 문제는 3개의 숫자의 합이 M을 넘지 않으면서 M과 가장 가까운 수를 찾아야 합니다. 저는 itertools의 combinations 함수를 사용하여 주어진 카드 중 3장을 골라 조합할 수 있는 경우의 수를 모두 구해 coc라는 리스트에 담았습니다. 그 다음 coc 리스트 내에 있는 카드의 조합들을 검사하여 m이 넘지 않는 가장 큰 수를 구하였습니다. 자세한 내용은 코드를 참고하시면 됩니다. 

문제이름(# 문제번호) 파이썬 코드

import sys
import itertools

n, m = map(int, sys.stdin.readline().split())
cards = list(map(int, sys.stdin.readline().split()))
coc = list(itertools.combinations(cards, 3))  # coc = combinations of cards
result = 0  # 결과값 초기화

for i in range(1, len(coc)):
    sum_of_cards = sum(coc[i])  # 카드 세 장의 합
    if sum_of_cards > m:  # 합이  m보다 클 경우 무시
        continue
    elif sum_of_cards > result:  # 카드 합이 result 보다 클 경우 result에 카드 합 넣어주기
        result = sum_of_cards

print(result)