Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- deep learning
- Gram matrix
- A Neural Algorithm of Artistic Style
- c#
- bayesian
- 신경망
- neural network
- CNN
- 합성곱 신경망
- project euler
- Python
- 수달
- SQL
- Autoencoder
- 히토요시
- 베이지안
- 딥러닝
- mnist
- 오일러 프로젝트
- 비샤몬당
- Convolutional Neural Network
- 냥코 센세
- 오토인코더
- backpropagation
- 역전파
- 자전거 여행
- 소인수분해
- 역전파법
- 전처리
- 소수
Archives
- Today
- Total
통계, IT, AI
32. Pandigital products 본문
1. 개요
문제는 이곳에서 확인할 수 있다. 7254는 39와 186의 곱으로 나타낼 수 있다. 즉 \(39 \times 186=7254\)이다. 이 수식에는 1부터 9까지의 숫자가 한번씩만 사용되었다. 7254와 같이, 1부터 9까지의 숫자를 한번씩만 사용하여 곱의 형태로 나타낼 수 있는 모든 숫자의 합을 구하는 것이 목표이다.
2. 구현
문제의 조건에 맞는 곱의 형태는 두가지 밖에 없다. 즉, 한자리 숫자와 네자리 숫자를 곱하여 네자리 숫자를 만드는 것과 두자리 숫자와 세자리 숫자를 곱하여 네자리 숫자를 만드는 경우 이외에는 문제의 조건에 맞지 않는다. 이를 이용하여 답을 구하자.
# -*- coding: utf-8 -*- answer = [] # CASE 1: 1-digit multiply 4-digit for first_term in range(2,10): first_term_set = set(str(first_term)) for second_term in range(1234, 9877): second_term_set = set(str(second_term)) if not len(second_term_set) == 4 or \ first_term_set & second_term_set or \ '0' in second_term_set : continue result = first_term * second_term result_set = set(str(result)) if not result_set & first_term_set and \ not result_set & second_term_set and \ not '0' in result_set\ and len(result_set) == 4 and result < 10000: print(first_term, second_term, result) answer.append(result) # CASE 2: 2-digit multiply 3-digit for first_term in range(12,99): first_term_set = set(str(first_term)) if not len(first_term_set) == 2 or \ '0' in first_term_set : continue for second_term in range(123, 988): second_term_set = set(str(second_term)) if not len(second_term_set) == 3 or \ first_term_set & second_term_set or \ '0' in second_term_set : continue result = first_term * second_term result_set = set(str(result)) if not result_set & first_term_set and \ not result_set & second_term_set and \ not '0' in result_set\ and len(result_set) == 4 and result < 10000: print(first_term, second_term, result) answer.append(result) print(sum((set(answer))))
답은 45228이다.
'IT > PROJECT_EULER' 카테고리의 다른 글
34. Digit factorials (0) | 2017.03.02 |
---|---|
33. Digit cancelling fractions (0) | 2017.03.01 |
31. Coin sums (0) | 2017.02.09 |
30. Digit fifth powers (0) | 2017.01.31 |
29. Distinct powers (0) | 2017.01.30 |
Comments