문제 풀이 방식:
from itertools import combinations_with_replacement
#맨 앞자리수 결정 (0제외)
compare = [1, 2, 3, 4, 5, 6, 7, 8, 9]
comAnswer = {1: 2, 2: 5, 3: 5, 4: 4, 5: 5, 0: 6, 6: 6, 9: 6, 7: 3, 8: 7}
# 성냥개비로 만들 수 있는 수
answer = {2: 1, 5: 2, 4: 4, 6: 0, 3: 7, 7: 8}
# 조합 할 수 있는 수
combination = [2, 3, 4, 5, 6, 7]
# 입력
tmps = []
# 입력
n = int(input())
for i in range(n):
tmps.append(int(input()))
for tmp in tmps:
#Min
maxTmp = tmp
# 7보다 작을 때
if tmp <= 7:
if tmp == 6:
Min = 6
else:
Min = answer[tmp]
# 자리 수 결정
else:
state = 0
if tmp % 7 == 0:
state = tmp // 7 - 1
else:
state = tmp // 7
ret = -1
# 맨 앞자리 결정
for i, v in enumerate(compare):
if ret == -2:
break
last = []
first = []
first.append(str(v))
# 조합 리스트 만듦
for j in combinations_with_replacement(combination, state):
if (tmp - comAnswer[v]) == sum(j):
last.append(list(j))
ret = -2
else:
continue
# 문자 -> 숫자로 변환
last = [[answer[k] for j, k in enumerate(v)] for i, v in enumerate(last)]
last = [[str(k) for j, k in enumerate(v)] for i, v in enumerate(last)]
last = [''.join(v) for i, v in enumerate(last)]
MinList = []
Min = ''
# 맨 앞자리 + 나머지
first = len(last) * first
for i in range(len(first)):
Min = first[i] + last[i]
MinList.append(Min)
last = list(map(int, MinList))
last = min(last)
#Max
maxList = []
if maxTmp % 2 == 0:
maxList = [2 for i in range(maxTmp //2)]
else:
if (maxTmp - 3) % 2 == 0:
maxList = [2 for i in range((maxTmp - 3) // 2)]
maxList.append(3)
maxList = sorted(maxList, reverse=True)
maxList = [answer[v] for i, v in enumerate(maxList)]
maxList = [str(v) for i, v in enumerate(maxList)]
Max = (''.join(maxList))
Max = int(Max)
print(Min, Max)