STUDY/Algorithm

[백준] 1038 감소하는수 python

sinawi95 2022. 1. 14. 12:59
728x90

https://www.acmicpc.net/problem/1038

 

1038번: 감소하는 수

음이 아닌 정수 X의 자릿수가 가장 큰 자릿수부터 작은 자릿수까지 감소한다면, 그 수를 감소하는 수라고 한다. 예를 들어, 321과 950은 감소하는 수지만, 322와 958은 아니다. N번째 감소하는 수를

www.acmicpc.net

모든 값을 탐색하면서 이전보다 큰 값인 경우에만 백트래킹하는 방법으로 풀었다.

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