반응형
문제 출처 :
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 |
반응형
'Applied > 알고리즘 문제풀이' 카테고리의 다른 글
[1676번] 팩토리얼 0의 개수 (0) | 2016.07.21 |
---|---|
[10164번] 격자상의 경로(Dynamic Programming, Mathematic) (0) | 2016.07.20 |
[5988번] 홀수일까 짝수일까 (0) | 2016.07.10 |
[10610번] 30 (0) | 2016.07.09 |
[1789번] 수들의 합 (0) | 2016.07.09 |