거꾸로 구구단

2017-01-09 04:08:59 | 조회수 1082



※이 설명은 공식 솔루션이 아닌 작성자의 개인적인 솔루션입니다.


이 문제는 작년 저희학교 경시대회 예비소집에 쓰였던 문제 중 하나입니다.


이 문제에서 제일 중요한 핵심은, 곱셈한 결과의 숫자를 어떻게 뒤집냐가 되는데요.

간단한 수식을 이용해 숫자를 뒤집을 수 있습니다.


지금부터 1234를 뒤집는 방법을 알려드리겠습니다.


1. 변수 2개를 선언하여 a=1234, b=0 으로 잡습니다.

2. 그 다음, a를 10으로 나눈 나머지를 구하고, b에 10을 곱한 다음, 그 나머지를 더해줍니다.

3. 그 다음, a를 10으로 나눕니다. 이 과정을 a=0이 될 때까지 반복합니다. 

글로만 봐서는 잘 이해가 안되겠죠? 이 과정을 순차적으로 진행시킨 결과는 다음과 같습니다.



횟수

a

b

0

1234

0

1

123

4(0*10+4)

2

12

43(4*10+3)

3

1

432(43*10+2)

4

0

4321(432*10+1)


a에서 구한 마지막 자리를, b에 10을 곱하여 있던 수를 한 자리씩 밀어버리고, 맨 마지막 자리에 넣는 방식입니다.

이 방법으로 굉장히 간단히 숫자를 뒤집을 수 있습니다.


이 외에도, 다른 방법으로 숫자를 뒤집을 수 있는 경우도 있는데요. 이 경우를 보시려면 하단 STEPS 바의 +버튼을 클릭하시면 됩니다.


소스코드에는 위에 적은 방법을 구현한 소스가 첨부됩니다. 확인하시고, 복습해 보세요!



※해당 소스코드는 참고용이며, 최적화 된 공식 솔루션 소스가 아닙니다. 이 소스를 그대로 복사하여 이용, 또는 제출하는 행위에 대한 불이익은 책임지지 않습니다.

#include<iostream>
using namespace std;

int main()
{
    int n, m, ans=0;

    cin >> n >> m;
    for (int i = 1; i <= m; i++)
    {
        int here = n*i, rev=0;
        while (here)
        {
            rev = rev * 10 + here % 10;
            here /= 10;
        }
        ans = max(ans, rev);
    }
    cout << ans;
}


거꾸로 구구단 - 알고리즘닷컴
여기서는 https://acmicpc.net 의 문제를 기반으로 한 설명과 소스코드를 포스팅합니다.

36 개의 글