Algorithm
[Euler Project] Problem 24 using Python
햇망고
2021. 2. 4. 05:57
Euler Project 24번 문제는 permutation이라는 logic 자체가 작은 문제들로 나눠서 풀 수 있는 문제다.
따라서 제귀적으로 앞 자리부터 하나의 digit씩 찾아가면 문제의 답을 찾을 수 있다.
"""
A permutation is an ordered arrangement of objects. For example, 3124 is one possible permutation of the digits
1, 2, 3 and 4. If all of the permutations are listed numerically or alphabetically, we call it lexicographic order.
The lexicographic permutations of 0, 1 and 2 are:
012 021 102 120 201 210
What is the millionth lexicographic permutation of the digits 0, 1, 2, 3, 4, 5, 6, 7, 8 and 9?
"""
import numpy as np
import math
# find first digit and redundant index
def get_digit(target_idx, digit_nums):
digit = target_idx // math.factorial(digit_nums-1)
redundant = target_idx - math.factorial(digit_nums-1) * digit
return digit, redundant
if __name__ == '__main__':
# 0: first >> 999999: millionth
target_idx = 999999
digit_num = 10
digits = [x for x in range(digit_num)]
res = []
for i in range(digit_num):
digit, red = get_digit(target_idx, 10-i)
print(digit, red)
# append given digit
res.append(str(digits[digit]))
# remove the number just picked
digits.remove(digits[digit])
# update target idx
target_idx = red
answer = int(''.join(res))
print(answer)