사실 그렇게까지 어려운 문제는 아니라고 할 수 있겠다.
변수 갯수 상관없이 문제를 풀면 각 자리수를 변수에 담아서
다시 계산을 해서 원래 입력값과 비교하면 별 문제가 없다.
다만 그 해법의 경우 문제를 제대로 풀기 전에 떠올라서, 변수를 좀 적게 써서 수식 형태로 처리하고픈 생각이 있었다.
몇 차례 시도했으나 수식으로 압축하다보니 시간 초과가 나는 경우가 몇 있었고..
#include <stdio.h>
int main()
{
int num, num_check;
int count = 0;
scanf("%d", &num);
num_check = num;
while (1)
{
int temp = (num_check*11)%100;
num_check = (temp%10)*10 + (temp/10);
count++;
if(num_check==num)
break;
}
printf("%d", count);
}
이 코드의 수식이 시간 내에 통과되었다.
원래는 이런 방식으로 생각했는데
일의 자리는 원래 숫자의 (일의자리 + 십의자리) 한 것의 일의 자리
십의 자리는 원래 숫자의 일의자리 이므로
여기서 볼수 있듯이 원래 숫자에서 다음 숫자로 넘어갈 때 (일의자리 + 십의자리) 가 10을 넘지 않으면
일의 자리는 곱하기 11이되고
십의 자리는 나누기 10이된다
그러나 10을 넘으면 일의 자리만 사용해야하므로..
골치아파진다
그래서 다른 방식으로 접근했다.
수식을 통해서 원래 숫자의 (일의 자리+십의 자리) 의 일의 자리 를 얻을 수 있을까?
얻을 수 있다!
원래 숫자를 곱하기 11하면, 그 숫자의 십의 자리는 (일의 자리 + 십의 자리) 일의 자리이다
(합이 10이 넘었을 때 백의 자리로 숫자가 넘어가므로)
또한 이 숫자의 일의 자리는 원래의 일의 자리 그대로이다.
즉 이 숫자의 십의 자리와 일의 자리를 맞바꾸면
구하고자 하는 수가 된다.
이에서 착안해 위의 해법을 찾았다.
근데..
그냥 간단하게 풀 수 있으면 그것대로도 좋다 ..