본문 바로가기
Development/Baekjoon

[C#] 2798번: 블랙잭

by Mobics 2025. 10. 6.

목차


    백준 단계별로 풀어보기

    25.10.06

    12단계: 브루트 포스


    2798번: 블랙잭

    문제 링크 : https://www.acmicpc.net/problem/2798

     

    문제 풀이

    >> 문제를 풀기 위해 알아야 할 개념

    - 브루트 포스 (무차별 대입)

    : 암호학에서 무차별 대입 공격 (brute-force attack)은 특정한 암호를 풀기 위해 가능한 모든 값을 대입하는 것을 의미한다.

     

    ※ 공식 문서 - 위키백과

     

    무차별 대입 공격 - 위키백과, 우리 모두의 백과사전

    위키백과, 우리 모두의 백과사전. 전자 프론티어 재단(EFF)에서 제작한 DES 무차별 대입 공격 하드웨어. 약 하루 안에 DES를 해독하는 것이 가능하다. 암호학에서 무차별 대입 공격(영어: brute-force at

    ko.wikipedia.org

     

    >> 풀이

    1. 카드의 개수와 목표 숫자를 입력 받아 그 중 목표 숫자를 int로 변환한다.
    2. 카드에 쓰여 있는 수를 입력 받고 수를 담을 int 배열을 선언한 다음, for 반복문을 통해 배열에 카드에 쓰여 있는 수를 담는다.
    3. 출력할 변수 result를 선언하고, 삼중 for문을 활용하여 모든 경우의 수 i, j, k에 대하여 arr[i] + arr[j] + arr[k] 값이 목표 숫자보다 작거나 같으면서 result보다 크다면 result 값을 갱신한다.
    4. 찾은 result 값을 출력한다.

     

    정답 코드

    class Backjoon
    {
        static void Main(string[] args)
        {
            string[] input = Console.ReadLine().Split();
            int M = int.Parse(input[1]);
            string[] input2 = Console.ReadLine().Split();
            int[] arr = new int[input2.Length];
    
            for (int i = 0; i < input2.Length; i++)
            {
                arr[i] = int.Parse(input2[i]);
            }
    
            int result = 0;
            for (int i = 0; i < input2.Length - 2; i++)
            {
                for (int j = i + 1; j < input2.Length - 1; j++)
                {
                    for (int k = j + 1; k < input2.Length; k++)
                    {
                        if (arr[i] + arr[j] + arr[k] <= M && arr[i] + arr[j] + arr[k] > result )
                            result = arr[i] + arr[j] + arr[k];
                    }
                }
            }
    
            Console.WriteLine(result);
        }
    }