백준 18511 큰 수 구성하기

나는야 멋쟁이·2023년 3월 17일
0

아래의 주석과 같이 문제가 생각보다 까다로움.. 왜 실5 문제인지 모르겠다. 주어진 3개의 숫자는 중복이 가능하므로 중복 순열을 사용해야함.(product)
문제는 만약 n=1000, k=1, list = 1이라면 최대로 만들 수 있는 수는 111임. 따라서 최대값을 찾되, 중복순열의 크기를 1씩 줄이면서 만들어야 n보다 작은 자리수 탐색이 가능하다.

from itertools import product

# boj 18511
n, k = map(int, input().split())
lis = list(map(str, input().split()))
l = len(str(n))
# lis의 원소는 중복 사용가능. -> 577 -> 중복순열
# n보다 적은 자리수까지 모두 고려해야함
# ex 1000 1이라면 111까지 조합

while True:
    pro = product(lis, repeat=l)
    ans = []

    for p in pro:
        s = int(''.join(p))
        if s <= n:
            ans.append(s)
    if len(ans) >= 1:
        print(max(ans))
        break
    else:
        l -= 1
profile
열심히 개발공부하기

0개의 댓글