본문 바로가기
코딩테스트

[Python] 백준 - 블랙잭

by 박매트 2024. 5. 13.

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