통계, IT, AI

32. Pandigital products 본문

IT/PROJECT_EULER

32. Pandigital products

Harold_Finch 2017. 2. 26. 21:13

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