728x90
https://www.acmicpc.net/problem/1038
모든 값을 탐색하면서 이전보다 큰 값인 경우에만 백트래킹하는 방법으로 풀었다.
desc_nums = []
visit = [False for _ in range(10)]
def make_number(visit):
ret = 0
for i in range(9, -1, -1):
if visit[i]:
ret = ret * 10 + i
return ret
def backtrack(ind=-1, prev=-1):
if ind == 10:
return
for i in range(ind + 1, 10):
if prev >= i: continue
if visit[i]: continue
visit[i] = True
desc_nums.append(make_number(visit))
backtrack(i)
visit[i] = False
def main():
N = int(input())
backtrack()
desc_nums.sort()
if N < len(desc_nums):
print(desc_nums[N])
else:
print(-1)
if __name__ == "__main__":
main()
'STUDY > Algorithm' 카테고리의 다른 글
[백준] 2805 나무자르기 python (0) | 2022.01.16 |
---|---|
[백준] 10819 차이를 최대로 python (0) | 2022.01.15 |
[백준] 15683 감시 python (0) | 2022.01.14 |
[백준] 11811 데스스타 python (0) | 2022.01.14 |
[백준] 1942 디지털시계 python (0) | 2022.01.14 |