Largest palindrome product
세자리 수를 곱해 만들 수 있는 가장 큰 대칭수
결국 abccba 형식을 갖고 있으며 이를 식으로 표현한다면 다음과 같다.
abccba = a * 100000 + b * 10000 + c * 1000 + c * 100 + b * 10 + c * 1
abccba = a * 100001 + b * 10010 + c* 1100
abccba = 11 * (a * 9091 + b * 910 + c * 100)
세 자리 수 곱셈의 대칭수는 100*100 부터 999*999 사이의 값이다.
즉 결과값은 10000 ~ 998001 사이에 있다.
라고 열심히 생각을 했으나 구현하기가 막막해 우선은 모든 수 대입으로 구현함.
package main import ( "fmt" "time" ) func main() { start := time.Now() var max, max0, max1, max2 int var array [6]int for a:=999; a>100; a-- { // 3자리수 이상이기에 for b:=999; b>a; b-- { // a*b 랑 b*a 랑 같기에 숫자가 역전될 경우를 방지 c := a * b if c%11 == 0 { max0 = c for i:=0; i<=5; i++ { // 하나씩 숫자를 배열에 입력 array[i] = c%10 c = c/10 } if array[0] == array[5] && array[1] == array[4] && array[2] == array[3] { //fmt.Println(array, a, b, c) // 모든 대칭수 출력 if max < max0 { // 최대값 저장해두기 max = max0 max1 = a max2 = b } } } } } fmt.Println("최대값은 : ", max1, " * ", max2, " = ", max) fmt.Println("계산 시간 : ", time.Since(start)) }
┌──(daleji㉿DESKTOP)-[~] └─$ go run euler4.go 최대값은 : 913 * 993 = 906609 계산 시간 : 652.6µs