본문 바로가기
알고리즘 문제 & 프로그래밍/C++

[C++]프로젝트 오일러 4번 문제&풀이 (세자리 수를 곱해 만들 수 있는 가장 큰 대칭수)

by 달슬 2020. 11. 18.
반응형

문제

앞에서부터 읽을 때나 뒤에서부터 읽을 때나 모양이 같은 수를 대칭수(palindrome)라고 부릅니다.

두 자리 수를 곱해 만들 수 있는 대칭수 중 가장 큰 수는 9009 (= 91 × 99) 입니다.

세 자리 수를 곱해 만들 수 있는 가장 큰 대칭수는 얼마입니까?

 

접근방법

1. 100 X 100 부터 999 X 999 까지 차례로 계산하되,

2. 각 자릿수를 벡터(vec) 값에 할당하여 비교하는 방식으로 대칭수를 구하고, 새로운 벡터(pal) 값에 저장한다.

   (로그를 사용하여 자릿 수를 계산한다.)

3. 벡터에 저장한 값 중, 최댓값이 우리가 구하고자 하는 값이다.

#include <iostream>
#include <cmath>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
    vector<int> pal;

    for (int a = 100; a < 1000; a++)
    {
        for (int b = a; b < 1000; b++)
        {
            int num = a * b;
            int r_num = num;
            int count = log10(num);

            vector<int> vec(count + 1);

            for (int i = count; i >= 0; i--)
            {
                vec[i] = num % 10;
                num /= 10;
            }

            if (vec[0] == vec[count] && vec[1] == vec[count - 1] && vec[2] == vec[count - 2])
            {
                pal.push_back(r_num);
                //cout << r_num << endl;
            }
        }
    }

    int max = *max_element(pal.begin(), pal.end());
    cout << "Answer is : " << max << endl;

    return 0;
}

 

참고

https://github.com/mannlim/ProjectEuler

 

mannlim/ProjectEuler

How to solve Project Euler using by C++. Contribute to mannlim/ProjectEuler development by creating an account on GitHub.

github.com

반응형

댓글