ブルートフォースアルゴリズムは単に力任せにやるものだと考えればよい。
時間もメモリもたっぷりあるのだから、できないことがあるだろうか?
カードを3枚選ぶのだから、for文を3回回せばよい。
ただし、同じカードを選ぶ条件には注意しよう。
詳しくは下に書いてある。
詳しい説明は面倒なので省略する。
# sys.stdin.readline을 이용해 데이터를 받는다.
from sys import stdin
put = stdin.readline
# 카드의 수, 그리고 목표 숫자를 받는다.
# 카드 숫자들은 map으로 쪼갠 뒤, list로 변환한다.
numOfCard, targetNum = map(int, put().split())
cardLst = list(map(int, put().split()))
# 총합들과 차이를 저장한다.
totals = []
diff = []
# 3장의 카드가 필요하므로 3번의 for문을 돈다.
# 카드리스트에서 카드를 한장씩 뽑는다.
for i in cardLst:
for j in cardLst:
for k in cardLst:
# 문제는 같은 카드를 뽑을 수 있다는 것.
# 같은 카드를 뽑으면 넘어간다.
if i == j or i == k or j == k:
continue
# 총합을 구한다.
# 총합이 목표 숫자보다 크면 넘어간다.
total = i + j + k
if targetNum - total < 0 :
continue
# 조건을 모두 통과하면 총합과 차이값을 저장한다.
totals.append(total)
diff.append(targetNum - total)
# 차이값들 중 최솟값의 인덱스를 구한다.
# totals에서 최솟값의 인덱스를 넣어 출력한다.
print(totals[diff.index(min(diff))])
댓글을 불러오는 중...