접근 방법
- 카드 3개에 대한 조합 전부 구하기
- 조합 중 가장 가까운 수 선택
import itertools
# target과 가장 가까운 수를 찾는 함수
def findNearNum(arr, target):
return sorted(arr, key=lambda x: abs(x-target))[0]
# 입력
n, target = map(int, input().split())
card = list(map(int, input().split()))
# 카드를 3장 고르는 조합 구한 후 합만 남기기
temp = list(itertools.combinations(card, 3))
temp = [sum(x) for x in temp]
while True:
answer = findNearNum(temp, target)
# target 보다 큰 수이므로 리스트에서 삭제
if target - answer < 0:
temp.remove(answer)
else:
break
print(answer)
이게 맞나?!
남들은 쉽게 푸는데 나만 어렵게 풀었나..?
n, m = map(int, input().split())
num = list(map(int, input().split()))
l = len(num)
ans = 0
for i in range(0, l-2):
for j in range(i+1, l-1):
for k in range(j+1, l):
if(num[i] + num[j] + num[k] > m):
continue
else:
ans = max(ans ,num[i] + num[j] + num[k])
print(ans)
이 문제는 브루트 포스(brute force) 알고리즘으로 해결할 수 있다.
3개의 카드를 뽑는 것 이므로 삼중반복문을 통해 모든 경우의 수를 구한 뒤 문제가 요구하는 답을 찾을 수 있다.
위와 같은 방식으로 문제를 푼 사람들이 itertools 라이브러리를 이용해 간단하게 풀 수 있다고 내가 푼 것과 유사한 방식의 풀이를 함께 써놓기도 한다.
내 풀이가 심각하게 문제가 있는 것은 아닌 듯하다.