여니의 취준 준비/코딩테스트 (Python)

[n18511] 큰 수 구성하기 in python

여니's 2021. 9. 27. 21:06


(풀이)

모든 수를 다 따져야 한다 (중복포함)

이때는 순열 + 중복허용을 하는 Product 함수를 사용해야 한다.

>>

중첩 루프에 해당하는 데카르트 곱

https://docs.python.org/3.8/library/itertools.html

 

itertools — Functions creating iterators for efficient looping — Python 3.8.12 documentation

 

docs.python.org

permutations는 순열이지만 중복 x

combination은 조합, (순서 X)

 

list(product(배열, repeat=숫자))

>> 

[('1', '1', '1'), ('1', '1', '5'), ('1', '1', '7'), ('1', '5', '1'), ('1', '5', '5'), ('1', '5', '7'), ('1', '7', '1'), ('1', '7', '5'), ('1', '7', '7'), ('5', '1', '1'), ('5', '1', '5'), ('5', '1', '7'), ('5', '5', '1'), ('5', '5', '5'), ('5', '5', '7'), ('5', '7', '1'), ('5', '7', '5'), ('5', '7', '7'), ('7', '1', '1'), ('7', '1', '5'), ('7', '1', '7'), ('7', '5', '1'), ('7', '5', '5'), ('7', '5', '7'), ('7', '7', '1'), ('7', '7', '5'), ('7', '7', '7')]

from itertools import product

n, k = map(int, input().split())
arr = list(map(str, input().split()))
length = len(str(n))

# product : 중복순열
while True:
    temp = list(product(arr, repeat=length))  # repeat을 통해 몇개를 뽑을지 설정한다.
    ex = []
    for i in temp:
        now=int(''.join(i))
        if now <= n:
            ex.append(now)
    if len(ex) >= 1:
        print(max(ex))
        break
    else:
        length -= 1