kjko46443   2년 전

어떻게 저 식이 성립하는지 이해가 안되어서요. 저 식이 어떻게 떠오를까요..? 또 왜 성립하는지 알려주시면 감사하겠습니다.

100이상 부분인 i//100*21+i==i//10*12 이 부분을 모르겠습니다.

ai4youej   2년 전

보통 식이 바로 떠오르는 것보다는 정해 코드를 줄이고 줄여서 저런 식으로 많이 나옵니다.

일단 i가 1부터 N까지 돌면서 한수인지 체크합니다.

i < 100인 경우에는 당연히 한수이므로 True가 나옵니다. True는 int형으로 1이므로, sum 부분에서 문제가 없습니다.

N < 1000이므로 이제 세 자리만 검사하면 됩니다.

i >= 100인 경우에 대해서는 질문자님이 궁금해하시는 식을 사용합니다.

i의 100의 자리를 a, i의 10의 자리를 b, i의 1의 자리를 c라고 합시다.

i가 한수라면, a - b == b - c입니다. 이를 정리하면 a + c == 2b가 됩니다.

a, b, c를 i에 대해서 표현하면

a = i//100

b = (i-100*a)//10

c = i-100*a-10*b 이 됩니다.

이를 위 식에 대입하면

a + (i-100*a-10*b) = 2*b가 되고, 이를 쭉 대입하고 정리하면

- 99*a - 10*b + i = 2*b

- 99*a + i = 12*b

- 99*a + i = 12 * ((i-100*a) // 10)

- 99*a + i = 12 * (i//10 - 10*a)

- 99*a + i = 12 * (i//10) - 120*a

21*a + i = 12 * (i//10)

21 * (i//100) + i = 12 * (i//10)

연산자 우선 순서를 고려하여 (*, //는 같은 우선순위이므로 앞에서부터 계산)

i//100*21 + i = i//10 * 12가 나옵니다

kjko46443   2년 전

아 확실하게 이해했습니다. 정말 자세하게 알려주셔서 감사합니다 !!!

댓글을 작성하려면 로그인해야 합니다.