내 코드
decN = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]
num = [0,10]
decN.append([])
num.append(num[1])
for i in range(1, 10):
for x in decN[0]:
if i <= x:
break
decN[1].append(x + 10 * i)
num[2] += 1
decN.append([])
num.append(num[2])
for i in range(1, 10):
for x in decN[1]:
if i <= x//10:
break
decN[2].append(x + 100 * i)
num[3] += 1
decN.append([])
num.append(num[3])
for i in range(1, 10):
for x in decN[2]:
if i <= x//100:
break
decN[3].append(x + 1000 * i)
num[4] += 1
decN.append([])
num.append(num[4])
for i in range(1, 10):
for x in decN[3]:
if i <= x//1000:
break
decN[4].append(x + 10000 * i)
num[5] += 1
decN.append([])
num.append(num[5])
for i in range(1, 10):
for x in decN[4]:
if i <= x//10000:
break
decN[5].append(x + 100000 * i)
num[6] += 1
decN.append([])
num.append(num[6])
for i in range(1, 10):
for x in decN[5]:
if i <= x//100000:
break
decN[6].append(x + 1000000 * i)
num[7] += 1
decN.append([])
num.append(num[7])
for i in range(1, 10):
for x in decN[6]:
if i <= x//1000000:
break
decN[7].append(x + 10000000 * i)
num[8] += 1
decN.append([])
num.append(num[8])
for i in range(1, 10):
for x in decN[7]:
if i <= x//10000000:
break
decN[8].append(x + 100000000 * i)
num[9] += 1
decN.append([])
num.append(num[9])
for i in range(1, 10):
for x in decN[8]:
if i <= x//100000000:
break
decN[9].append(x + 1000000000 * i)
num[10] += 1
N = int(input())
flag = False
for i in range(1, 11):
if N < num[i]:
flag = True
print(decN[i - 1][N - num[i - 1]])
break
if not flag:
print(-1)
엄청난 노가다를 했다.
시간을 재고 푸느라 급하게 했는데 반복문을 써도 될 뻔했다.
다른 사람 코드
# from timeit import Timer 로 시간측정
import itertools
n=int(input())
T=True
for i in range(1,11):
L=list(itertools.combinations("9876543210",i))[::-1]
if n<len(L):
print(''.join(L[n]))
T=False
break
else:
n-=len(L)
if T:
print(-1)
9876543210 으로 만드는 조합 (단, 선후관계는 바뀌지 않음) 을 이용한 것이다.
반복문에 대하여 i 개짜리 조합을 만들어 i개짜리 조합은 987..부터 시작하므로 이를 역순으로 만들고
ex. 2개짜리 조합은
98 97 96 95 94..... 21 20 10 이고 이를 역순으로 하면 순서가 맞다.
이후 n < L[n]이면 L[n]에서 공백을 없애서 출력한다.
import itertools
str = "abcd"
arr = list(itertools.combinations(str, 2))
print(arr)
print(''.join(arr[0]))
위와 같이 출력되는 것을 볼 수 있다.