반응형
문제
앞에서부터 읽을 때나 뒤에서부터 읽을 때나 모양이 같은 수를 대칭수(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;
}
참고
반응형
'알고리즘 문제 & 프로그래밍 > C++' 카테고리의 다른 글
[C++]프로젝트 오일러 6번 문제&풀이 (1부터 100까지 "제곱의 합"과 "합의 제곱"의 차는?) (0) | 2020.11.19 |
---|---|
[C++]프로젝트 오일러 5번 문제&풀이 (1 ~ 20 사이의 어떤 수로도 나누어 떨어지는 가장 작은 수) (0) | 2020.11.19 |
[C++]프로젝트 오일러 3번 문제&풀이 (가장 큰 소인수 구하기) (0) | 2020.11.17 |
[C++]프로젝트 오일러 2번 문제&풀이 (피보나치 수열에서 4백만 이하이면서 짝수인 항의 합) (0) | 2020.11.17 |
[C++]프로젝트 오일러 1번 문제&풀이 (1000보다 작은 자연수 중에서 3 또는 5의 배수를 모두 더하면?) (0) | 2020.11.17 |
댓글