https://www.acmicpc.net/problem/2798
from itertools import combinations
N,M = list(map(int,input().split()))
arr = list(map(int,input().split()))
arr.sort()
min = 300000
for i in combinations(arr,3):
n = M - sum(list(i))
if (n>=0 and n <= min):
min = n
print(M-min)
중복을 허용하지 않는 3개의 조합으로 만들 수 있는 경우의 리스트 중,
모든 3개의 조합을 토대로 합을 구한 후, 그 합 중에서 제일 차이가 덜 나는 합 값을 출력한다.
다른 사람 답
import sys
n, m = map(int, sys.stdin.readline().split())
ret = 0
card = list(map(int, sys.stdin.readline().split()))
for i in range(n - 2):
for j in range(i + 1, n - 1):
for k in range(j + 1, n):
if (card[i] + card[j] + card[k] <= m):
ret = max(ret, card[i] + card[j] + card[k])
print (ret)
브루트 포스로도 풀 수 있군...
kotlin Ver 답
import java.util.Scanner
fun main(args: Array<String>) {
val scanner = Scanner(System.`in`)
val (N, M) = scanner.nextLine().split(" ").map { it.toInt() }
val arr = scanner.nextLine().split(" ").map { it.toInt() }.sorted()
var min = 300000
for (i in 0 until N) {
for (j in i + 1 until N) {
for (k in j + 1 until N) {
val sum = arr[i] + arr[j] + arr[k]
val n = M - sum
if (n in 0..min) {
min = n
}
}
}
}
println(M - min)
}
for ( i in 0 until N) ,,, 메모
list.sorted() 메모
'코딩테스트' 카테고리의 다른 글
[Python] 백준 - 퇴사 (0) | 2024.05.13 |
---|---|
[Python] 백준 - 한수 (0) | 2024.05.13 |
[Python] 백준 - 영화감독 숌 (0) | 2024.05.10 |
[Python] 백준 - 수 이어쓰기 1 (0) | 2024.05.09 |
[코딩테스트] 1,2,3 더하기 - Python (0) | 2024.05.03 |