반응형
문제
앞에서부터 읽을 때나 뒤에서부터 읽을 때나 모양이 같은 수를 대칭수(palindrome)라고 부릅니다.
두 자리 수를 곱해 만들 수 있는 대칭수 중 가장 큰 수는 9009 (= 91 × 99) 입니다.
세 자리 수를 곱해 만들 수 있는 가장 큰 대칭수는 얼마입니까?
코드
#include <stdio.h>
int main(void)
{
int i, j; //반복제어변수
int pal = 0; //대칭수
int num = 0; //임시 수
for (i = 1; i <= 999; i++)
{
for (j = 1; j <= 999; j++)
{
num = i * j;
if (
num / 100000 == num % 10
&& num / 10000 % 10 == num % 100 / 10
&& num / 1000 % 100 == num % 1000 / 100
&& pal < num
)
{
pal = num;
}
}
}
printf("%d", pal);
return 0;
}
실행하면 906609라는 결과값이 출력된다.
맨 처음에는 배열이 생각났는데 정수를 한 자리 한 자리마다 저장하게끔 할 수는 없다.
한 자리 한 자리 분할하려면 어떻게 해야할까를 생각해봤다.
제시된 수를 10의 배수로 나누면 각 자리에 해당하는 수를 얻을 수 있다.
가장 큰 세자리 수인 999끼리 곱한 값은 998001이므로 가장 큰 대칭수는 여섯 자리일 것이라 가정했다.
제시된 수가 654321이라고 하자.
100000으로 나누면 몫은 6이고, 10으로 나누면 나머지는 1이다. 이 둘을 비교하면 된다.
10000으로 나누면 몫은 65이고, 100으로 나누면 나머지는 21이다.
몫을 10으로 나누면 나머지는 5이다. 나머지를 10으로 나누면 몫은 2이다. 이 둘을 비교하면 된다.
1000으로 나누면 몫은 654이고, 1000으로 나누면 나머지는 321이다.
몫을 100으로 나누면 몫은 4이다. 나머지를 100으로 나누면 몫은 3이다. 이 둘을 비교하면 된다.
검증한 num에 저장된 값이 이전에 pal에 저장된 값보다 크면 그 값을 pal에 저장한다.
반응형
'프로그래밍 > Baekjoon' 카테고리의 다른 글
(C언어)프로젝트 오일러(Project Euler) 6. 1부터 100까지 "제곱의 합"과 "합의 제곱"의 차는? (0) | 2020.05.25 |
---|---|
(C언어)프로젝트 오일러(Project Euler) 5. 1 ~ 20 사이의 어떤 수로도 나누어 떨어지는 가장 작은 수 (0) | 2020.05.25 |
(C언어)프로젝트 오일러(Project Euler) 3.가장 큰 소인수 구하기 (0) | 2020.05.25 |
[C언어]프로젝트 오일러(Project Euler) 2. 피보나치 수열에서 4백만 이하이면서 짝수인 항의 합 (0) | 2020.05.25 |
project euler(프로젝트 오일러) 1. 1000보다 작은 자연수 중에서 3 또는 5의 배수를 모두 더하면? (0) | 2018.03.28 |