반응형
1부터 n까지의 각 숫자를 한번씩만 써서 만들 수 있는 숫자를 팬디지털(pandigital)이라고 합니다.
예를 들면 15234는 1부터 5의 숫자가 한번씩만 쓰였으므로 1 ~ 5 팬디지털입니다.
7254라는 숫자는 그런 면에서 특이한데, 39 × 186 = 7254 라는 곱셈식을 만들 때 이것이 1 ~ 9 팬디지털이 되기 때문입니다.
이런 식으로 a × b = c 가 1 ~ 9 팬디지털이 되는 모든 c의 합은 얼마입니까?
(참고: 어떤 c는 두 개 이상의 (a, b)쌍에 대응될 수도 있는데, 이런 경우는 하나로 칩니다)
오늘 건...좀 멍청하게 짰다. 수도코드도 짜지 않았고...
풀기 귀찮아서 계속 미루다가 38번이 팬디지털을 응용하는 문제여서 풀었다.
좀더 예쁘게 짤 수 있을 것 같은데...
팬디지털 되는 식이
0 * 0000 = 0000 도 있고,
00 * 000 = 0000 도 있어서...그냥 이 두 케이스를 경우의 수로 넣어줬다.
팬디지털이 되는 수의 나열은 itertools의 permutations()로 만들었다.
시간은 약 0.65초 걸린다.(케이스를 두 개로 나누지만 않으면 시간이 절반 이하로 줄어들 것 같다.)
반응형
'개발 > 알고리즘 문제' 카테고리의 다른 글
[Project Euler 39] 가장 많은 직각삼각형이 만들어지는 둘레(≤ 1000)의 길이는? (4) | 2016.05.05 |
---|---|
[Project Euler 38] 어떤 수에 (1, 2, ... )를 곱해서 이어붙여 얻을 수 있는 가장 큰 1 ~ 9 팬디지털 숫자 (122) | 2016.05.04 |
[Project Euler 37] 왼쪽이나 오른쪽에서 한자리씩 없애가도 여전히 소수인 수의 합은? (0) | 2016.04.29 |
[Project Euler 36] 10진법과 2진법으로 모두 대칭수인 1,000,000 이하 숫자의 합 (0) | 2016.04.27 |
[Project Euler 35] 백만 이하인 circular prime 개수 구하기 (0) | 2016.04.23 |
댓글