백준/c

백준_2798_블랙잭

S0LL 2024. 4. 22. 23:37

 

문제설명)

자연수가 적힌 N장의 카드를 숫자가 보이도록 바닥에 놓고 M을 외친다.

플레이어는 M을 넘지 않으면서 M과 가장 가깝도록 3장의 카드를 고른다.

N장의 카드에 써져있는 숫자가 주어졌을 때, 카드 3장의 합을 구하시오. 

 

 

문제 풀기 전 생각)

100장 이하의 카드가 주어지므로, 배열과 반복문을 이용하여 풀면 괜찮을 것 같습니다.

 

풀이)

N,M 을 입력받은 후 N만큼 배열을 입력받습니다.

그 후, 3중 for 문을 이용하여 M과 가장 가까우면서 가장 큰 값을 찾습니다.

이때, 카드의 합이 M을 넘으면 안되므로, 조건을 추가해줍니다.

또한 카드의 합이 M과 같아지면 더이상 탐색의 의미가 없으므로 그 값을 출력하고 즉시 종료합니다.

 

전체 코드)

#include <stdio.h>

int main(void)
{
    int N = 0, M = 0;
    scanf("%d %d", &N, &M);

    int card[100] = {0};

    for (int i = 0; i < N; i++)
    {
        scanf("%d", &card[i]);
    }

    int max = 0;
    for (int i = 0; i < N; i++)
    {
        for (int j = i + 1; j < N; j++)
        {
            for (int k = j + 1; k < N; k++)
            {
                int sum = card[i] + card[j] + card[k];
                if (sum > max && sum <= M)
                {
                    max = sum;

                    if (max == M)
                    {
                        printf("%d\n", max);
                        return 0;
                    }
                }
            }
        }
    }
    printf("%d\n", max);
    return 0;
}

 

3중 반복문을 이용하여 최악의 경우 시간은 꽤 걸리겠지만, 간단한 문제라 단순하게 해결하였습니다.

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

백준_15829_Hashing  (0) 2024.04.23
백준_2525_오븐시계  (0) 2024.04.23
백준_10926_??!  (0) 2024.04.23
백준_2292_벌집  (0) 2024.04.22
백준_2231_분해합  (0) 2024.04.22