반응형

문제 출처 :

 

https://www.acmicpc.net/problem/11809



알고리즘 분석 :


문제 해결에 필요한 사항

1.   123      123

 23 이면   23으로 변경하는 알고리즘


2. 행성이 소멸되었는지 소멸되지 않아 출력해야 될 것이 있는지 확인





소스 코드 : 


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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#include <stdio.h>
 
// 수를 받아내는 배열
char arr1[11];
char arr2[11];
// strcpy를 위해 이용된 임시 배열
char tmp1[11];
char tmp2[11];
 
int main()
{
    int i, n, m, len, cnt = 0, yoda = 0;
 
    // -1로 초기화
    for (i = 0; i < 10; i++)
        arr1[i] = '/';
 
    for (i = 0; i < 10; i++)
        arr2[i] = '/';
 
    scanf("%s", arr1);
    scanf("%s", arr2);
 
    n = strlen(arr1);
    m = strlen(arr2);
 
    // 가장 긴 수를 가진 길이를 len으로
    if (n > m) len = n;
    else len = m;
 
    // 123      123
    // 23 이면   23으로 변경하는 알고리즘
 
    strcpy(tmp1, arr1);
    strcpy(arr1 + (len - n), tmp1);
 
    for (i = 0; i < len - n; i++)
        arr1[i] = '/';
 
    strcpy(tmp1, arr2);
    strcpy(arr2 + (len - m), tmp1);
 
    for (i = 0; i < len - m; i++)
        arr2[i] = '/';
 
    // 숫자 비교 후 파괴 과정
    for (i = 0; i < len; i++)
    {
        if (arr1[i] > arr2[i])
            arr2[i] = '/';
 
        else if (arr1[i] < arr2[i])
            arr1[i] = '/';
    }
 
    // 샘플 출력
    //printf("1 :: %s\n", arr1);
    //printf("2 :: %s\n", arr2);
 
 
    // 출력 과정
    for(i = 0; i < len ; i ++)
    {
        // '/'이 하나라도 있으면 소멸되지 않았는 것
        if (arr1[i] != '/')
            break;
        
        if (i == len-1)
        {
            printf("YODA");
            yoda = 1// YODA가 출력되면 아래는 진행하면 안된다.
        }
    }
 
    if(yoda == 0)
    {
        cnt = 0;
        for (i = 0; i < len; i++)
            if (arr1[i] != '/' && arr1[i] != '0')
                cnt++;
        // cnt가 0이 아니라면 수가 0으로 구성되지 않았다는 것
        // 즉 00 이런것이 아니라는것
 
 
        // cnt가 0이 아니니 '/'을 제외한 값들을 출력해준다.
        if (cnt != 0)
        {
            for (i = 0; i < len; i++)
            {
                if (arr1[i] == '/')
                    continue;
    
                else
                    printf("%c", arr1[i]);
            }
        }
        // 그게아닌 00 이런식으로 구성되있다면 0만 출력해준다.
        else
            printf("0");
    }
    printf("\n");
 
    // 위와 동일한 코드
    yoda = 0;
 
    for (i = 0; i < len; i++)
    {
        if (arr2[i] != '/')
            break;
 
        if (i == len - 1)
        {
            printf("YODA");
            yoda = 1;
        }
    }
 
    if(yoda == 0)
    {
        cnt = 0;
        for (i = 0; i < len; i++)
            if (arr2[i] != '/' && arr2[i] != '0')
                cnt++;
 
        if (cnt != 0)
        {
            for (i = 0; i < len; i++)
            {
                if (arr2[i] == '/')
                    continue;
 
                else
                    printf("%c", arr2[i]);
            }
        }
        else
            printf("0");
    }
 
}
 
//                                                       This source code Copyright belongs to Crocus
//                                                        If you want to see more? click here >>
Crocus




숏코딩 -


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
#include <stdio.h>
 
int main()
{
    int a,b,A,B,p,q;
    scanf("%d %d",&a,&b);
    A=0;
    B=0;
    p=1;
    q=1;
    while(a||b)
    {
        if(a%10>=b%10)
        {
            A+=a%10*p;
            p*=10;
        }
        if(b%10>=a%10)
        {
            B+=b%10*q;
            q*=10;
        }
        a/=10;
        b/=10;
    }
    p-1?printf("%d\n",A):printf("YODA\n");
    q-1?printf("%d\n",B):printf("YODA\n");
     
    return 0;
}
Crocus


반응형