본문 바로가기
개발/알고리즘 문제

[Project Euler 32] 1~9 팬디지털 곱셈식을 만들 수 있는 모든 수의 합

by 유다110 2016. 5. 2.
반응형

1부터 n까지의 각 숫자를 한번씩만 써서 만들 수 있는 숫자를 팬디지털(pandigital)이라고 합니다.
예를 들면 15234는 1부터 5의 숫자가 한번씩만 쓰였으므로 1 ~ 5 팬디지털입니다.

7254라는 숫자는 그런 면에서 특이한데, 39 × 186 = 7254 라는 곱셈식을 만들 때 이것이 1 ~ 9 팬디지털이 되기 때문입니다.

이런 식으로 a × b = c 가 1 ~ 9 팬디지털이 되는 모든 c의 합은 얼마입니까?

(참고: 어떤 c는 두 개 이상의 (ab)쌍에 대응될 수도 있는데, 이런 경우는 하나로 칩니다)


오늘 건...좀 멍청하게 짰다. 수도코드도 짜지 않았고...

풀기 귀찮아서 계속 미루다가 38번이 팬디지털을 응용하는 문제여서 풀었다.

좀더 예쁘게 짤 수 있을 것 같은데...


팬디지털 되는 식이 

0 * 0000 = 0000 도 있고,

00 * 000 = 0000 도 있어서...그냥 이 두 케이스를 경우의 수로 넣어줬다.

팬디지털이 되는 수의 나열은 itertoolspermutations()로 만들었다.

시간은 약 0.65초 걸린다.(케이스를 두 개로 나누지만 않으면 시간이 절반 이하로 줄어들 것 같다.)



반응형

댓글