ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [백준 2798번] : 블랙잭
    Programming/백준 2021. 7. 20. 07:47

    문제

    N장의 카드에 써져 있는 숫자가 주어졌을 때, M을 넘지 않으면서 M에 최대한 가까운 카드 3장의 합을 구해 출력하시오.

     

    입력

    첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다.
    합이 M을 넘지 않는 카드 3장을 찾을 수 있는 경우만 입력으로 주어진다.

     

    출력

    첫째 줄에 M을 넘지 않으면서 M에 최대한 가까운 카드 3장의 합을 출력한다.

     

    브루트 포스 문제인 만큼 세 카드를 더할 수 있는 모든 경우의 수를 구하고 그중 M하고 제일 가까워지는 값을 구하면 된다.

    시간 복잡도는 O(N^3) 이다.

    #include <iostream>
    #include <vector>
    
    
    int main(void)
    {
    	std::cin.tie(NULL);
    	std::cout.tie(NULL);
    	std::cin.sync_with_stdio(false);
    
    	int N, M;
    	std::cin >> N >> M;
    	std::vector<int> cards(N, 0);
    
    	for (int i = 0; i < N; i++)
    		std::cin >> cards[i];
    
    	int max = 0;
    
    	for (int i = 0; i < N; i++)
    	{
    		for (int j = 0; j < N; j++)
    		{
    			if (i == j)
    				continue;
    			for (int k = 0; k < N; k++)
    			{
    				if (j == k
    					|| i == k)
    					continue;
    
    				int sum = cards[i] + cards[j] + cards[k];
    				if (sum > M)
    					continue;
    
    				if (max < sum)
    					max = sum;
    
    			}
    		}
    	}
    
    	std::cout << max << "\n";
    
    	return 0;
    }

     

    'Programming > 백준' 카테고리의 다른 글

    [백준 : 2750번] 수 정렬하기  (0) 2021.07.29
    10870번 : 피보나치 수 5  (0) 2021.05.05
    10872번 : 팩토리얼  (0) 2021.05.05
    4153번 : 직각삼각형  (0) 2021.05.05
    3009 : 네 번째 점  (0) 2021.05.05
Designed by Tistory.