본문 바로가기
Computer Science

최대 상금

by OKOK 2019. 1. 24.

1. swap define 하는 것

2. 재귀인데, step, len-1 이랑 2가지 조건을 달은 것

3. 남은 것에 대해서 처리하는 것

4. 같은 숫자에 대해서 처리하는 부분 dif = 0, 이미 위에서 정렬되어서 나옴


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include <stdio.h>
 
#define swap(a,b,t) (t=a, a=b, b=t) // swap 이렇게도 사용이 가능함
 
char num[7];
int change;
int len;
int max;
char res[7];
 
void cng(int step)
{
    int tmp;
    int i, j;
 
    if ((step == change) || (step == len - 1)) // change 를 모두 썼거나, 4번을 바꿨으면 모두 바꾼 것.
    {
        tmp = 0;
        for (i = 0; i < len; ++i)
            tmp = tmp * 10 + num[i] - '0'// char, string 으로 받아서, 10진수로 게산함
        if (tmp > max)
        {
            for (i = 0; i <= len; ++i)
                res[i] = num[i];
            max = tmp; // 제일 큰 숫자를 기록함
        }
        return;
    }
    for (i = step; i < len; ++i)
    {
        for (j = i; j < len; ++j)
        {
            if (num[i] <= num[j])
            {
                swap(num[i], num[j], tmp);
                cng(step + 1);
                swap(num[i], num[j], tmp);
            }
        }
    }
}
 
int main()
{
    freopen("input.txt""r", stdin);
    int T, test_case;
    int dif;
    int tmp;
    int i, j;
 
    scanf("%d"&test_case);
    for (T = 1; T <= test_case; ++T)
    {
        max = 0;
        scanf("%s %d", num, &change);
        for (len = 0; num[len] != '\0'++len);
        cng(0);
        dif = change - len + 1;
        
        // 남은 change 갯수에 대해서 풀이하는 것
        if (dif > 0)
        {
            for (i = 0; i < len; ++i)
            {
                for (j = i + 1; j < len; ++j)
                {
                    if (res[i] == res[j])
                        dif = 0// swap 필요 없음
                }
            }
        }
        if ((dif > 0&& (dif % 2 == 1)) // change 갯수가 남아있고, 그것이 홀수라면, 제일 마지막 2개 변경함
            swap(res[len - 1], res[len - 2], tmp);
        printf("#%d %s\n", T, res);
    }
    return 0;
}
cs

 


'Computer Science' 카테고리의 다른 글

K번째 문자열  (0) 2019.01.28
균형점  (0) 2019.01.24
암호코드 스캔  (0) 2019.01.24
단순 2진 암호코드  (0) 2019.01.24
Contact  (0) 2019.01.24

댓글