문제링크
문제풀이
- 조합을 구하는 함수를 정의한다
- 팩토리얼을 구하는 함수를 정의한다. (팩토리얼을 lambda를 이용한다)
- 조합의 공식에 따라 구해진 값이 1,000,000이 넘는 값을 카운팅 한다.
import unittest
import functools
class TestCombination(unittest.TestCase):
def testCombination(self):
value = self.combination(5, 3)
self.assertEqual(value, 10)
value = self.combination(23, 10)
self.assertEqual(value, 1144066)
def combination(self, a, b):
v1 = self.fact(a)
v2 = (a == b and 1 or (self.fact(b) * (self.fact(a - b))))
return v1 / v2
def fact(self, a):
if a == 0:
return 0
fact_value = functools.reduce(lambda x, y: x * y, range(1, a + 1))
return fact_value
def testOverMillionCount(self):
count = 0
for i in range(1, 101):
for j in range(1, i):
combi_value = self.combination(i, j)
if combi_value > 1000000:
# print("%d, %d, combi_value=%d" % (i, j, combi_value))
count += 1
print("Over 1million counts = ", count)
if __name__ == '__main__':
suite = unittest.TestLoader().loadTestsFromTestCase(TestCombination)
unittest.TextTestRunner(verbosity=2).run(suite)