[C/Python] 백준 2798번 - 블랙잭

매미·2024년 7월 4일

백준

목록 보기
10/15

https://www.acmicpc.net/problem/2798

문제

발상

M 값과 차이가 가장 적으면서도 넘지 않는 값을 찾기 위해서는 모든 경우의 수를 일일이 대조(브루트포스)해봐야 한다.

Clang

#include <stdio.h>
#include <stdlib.h>


int main()
{
    int N,M;
    scanf("%d %d", &N, &M);
    int arr[N];
    for (int i=0; i<N; i++) {
        scanf("%d", &arr[i]);
    }
    
    int result = arr[0]+arr[1]+arr[2];
    int diff = abs(M-result);
    
    for (int i=0; i<N-2; i++) {
        for (int j=i+1; j<N-1; j++) {
            for (int k=j+1; k<N; k++) {
                int sum = arr[i]+arr[j]+arr[k];
                if (diff > abs(M-sum) && sum<=M) {
                    diff = abs(M-sum);
                    result = sum;
                }
            }
        }
    }
    printf("%d", result);
    return 0;
}

Python

N, M = map(int,input().split())
numlist = list(map(int,input().split()))
diff = abs(M-(numlist[0]+numlist[1]+numlist[2]))
for i in range(0,N):
    for j in range(i+1,N):
        for k in range(j+1,N):
            sum = numlist[i]+numlist[j]+numlist[k]
            if diff > abs(M-sum) and sum <= M:
                diff = abs(M - sum)
                result = sum

print(result)
profile
Kwangwoon Univ. Computer Information and Engineering 24

0개의 댓글