qktlf789456   3년 전

만약에 입력받은 것이 a 라고 가정했을때

cout << a % 9 ? a % 9 : 9;


이게 어떻게 답이 될 수 있나요 

직접 해보니 답이되긴하는데 어떻게 이런 식을 도출해낼 수 있는지 궁금합니다.

어떻게 증명할 수 있을까요?

a99azaz   3년 전

12345 라는 수가 있으면 이건 10000 + 2000 + 300 + 40 + 5 입니다.

다르게 써보면 1*10000 + 2*1000 + 3 * 100 + 4 * 10 + 5 입니다.

10000 은 9999+1 입니다. 1000은 999+1 입니다. 다시 다르게 써보면

1*(9999+1) + 2*(999+1) + 3*(99+1) + 4*(9+1) + 5 입니다.

분배해서 정리해보면

(1*9999 + 2*999 + 3*99 + 4*9) + (1+2+3+4+5)

왼쪽 괄호는 9의 배수입니다. 그럼 9로 나눈 나머지는 오른쪽 괄호고 이건 자리수 더한 값이네여

a99azaz   3년 전

9로 나눈 나머지가 오른쪽 괄호라는건 잘못 말했네요

1+2+3+4+5는 15고 동일한 방법으로 (1*9) + (1 + 5) 로 바뀌고 12345를 9로 나머지 연산 할때 1*9 도 같이 없어져서 1+5=6 이 됩니다

qktlf789456   3년 전

세상에.. a99azaz 님 대단합니다..

혹시 이런 식을 도출하는과정이 궁금합니다.

딱 보시고 " 아 이건 당연히 9 mod연산을 하면되겠지? "

하신건가요? 아니면 수를 풀어서 만들다보니 이렇게 하면 되겠다고 도출이되신건가요..?

저는 코딩할때 수학적으로 풀어보지않았어서 어떤방법으로 접근해야할지 궁금합니다.

a99azaz   3년 전

저도 어디서 본거라...

다만 9의 배수 판정법은 아실거라 생각합니다. 어떤 수의 자릿수를 더해서 9의 배수면 어떤 수는 9의 배수다 이거요

자릿수를 더해서 9의 배수면 그 9의 배수 자릿수를 더하고 더하고 하면 결국 9가 나오니 어떤 수에 '숫자 놀이'를 해서 9가 나오면 그건 9의 배수다 라는건 알 수 있네요

어떤 수가 9의 배수면 어떤 수를 9로 나누었을때 나머지가 0이면서 숫자를 다 더하면 9라는 뜻이고

그럼 어떤 수 - 1의 숫자를 다 더하면 당연히 8이고 9로 나누었을때 나머지는 8, 어떤 수 -2는 7... 이런 식으로 생각 할 수 있지 않을까 싶습니다.

입력에서 0이 안나오고 1부터 쭉 답을 써보면 1~9 가 순서대로 반복되는걸 알 수 있는데 여기서 힌트를 얻을 수 있을거 같습니다

저는 수학도 알고리즘 풀이도 잘하는건 아니지만 일단 답을 쭉 써봤을때 규칙이 보이는 경우도 있더라구요.

qktlf789456   3년 전

답변 감사합니다.

저는 수학자가 아닌 개발자가 되고싶지만

좋은 개발자가 되기 위해서는 효율적인 수학풀이능력도 있어야하는걸 요즘 새삼 깨닳고있습니다 ㅠ

구현문제는 복잡해도 재밌게 풀지만, DP나 수학식관련문제는 많이 틀려서 속상하네요 

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