공부/SWEA

SWEA 9839. 최고의 쌍 (C++)

밤톨ㅇl 2024. 5. 8. 01:35
#include <stdio.h>

int N, max;
int num[1001];
bool visited[1001];

bool check(int n)
{
    int a = n % 10;
    bool flag = true;
    while (n / 10 > 0)
    {
        n = n / 10;
        if (n % 10 == a - 1)
            a--;
        else
        {
            flag = false;
            break;
        }
    }
    return flag;
}

void solve(int depth, int n)
{
    if (depth == 2)
    {
        if (max < n && check(n))
            max = n;

        return;
    }

    for (int i = 0; i < N; i++)
    {
        if (!visited[i])
        {
            visited[i] = true;
            n *= num[i];
            solve(depth + 1, n);
            n /= num[i];
            visited[i] = false;
        }
    }
}
int main()
{
    int tc = 0;
    scanf("%d", &tc);
    for (int t = 1; t <= tc; t++)
    {
        max = -1;
        scanf("%d", &N);
        for (int i = 0; i < N; i++)
        {
            scanf("%d", &num[i]);
        }

        solve(0, 1);

        printf("#%d %d\n", t, max);
    }
}

1. dfs로 모든 경우의 수 확인

2. 곱셈의 결과가 max보다 작다면 check 필요 없음

3. 연속되는 숫자 확인은 n % 10, n / 10으로 확인

4. 끝!!