언뜻 배열을 생각 할 수도 있으나 10진수 쉬프트의 개념으로 접근한다면 깔끔하게 풀수 있다는 조언을 받았죠.
즉, 변수 하나를 만들어서
1234 -> NULL
123 -> 4
12 -> 43
1 -> 432
이런식으로 원본(좌측)수는 나머지를 구한뒤 10씩 나누고 사본(우측) 은 원본의 나머지를 가져온뒤 10씩 곱해가는 과정입니다. 아 신기하당~ㅋㅋ
#includeint swapnum(int num_temp) //뒤집은 수를 만드는 함수 { int num_next=NULL; // 1. 빈 변수를 하나 만든뒤 while(num_temp>0) // 2. 원본의 수가 한자리가 될때까지 반복 { num_next*=10; // 3. 사본에 10씩 곱해서 앞으로 채워 넣습니다 num_next+=num_temp%10; // 4. 원본의 끝자리를 사본에게 보냅니다 num_temp/=10; // 5. 원본을 10씩 나누어서 다음수가 오게 합니다 } return num_next; // 6. 뒤집힌 수 출력 } int main(void) { int repeat=NULL; int num1, num2; num1=num2=NULL; scanf("%d", &repeat); // 입력반복 횟수 for(int i=0; i< repeat; i++) { scanf("%d", &num1); num2=swapnum(num1)+num1; //원본과 뒤집힌 수를 더합니다 if(swapnum(num2)==num2){printf("YES\n");}else printf("NO\n"); //두번째 원본과 뒤집힌수의 비교 num1=num2=NULL; // 다음 씬을 위한 초기화 } return 0; }
'4_ 고소한 알고리즘' 카테고리의 다른 글
C- ACM - 다운로드 (0) | 2010.07.02 |
---|---|
C- ACM - 지뢰찾기 (4) | 2010.06.23 |
C- ACM - 소수판정 (0) | 2010.06.09 |
C- ACM - 문자열 (0) | 2010.06.08 |
C- ACM - Coin (0) | 2010.06.08 |