STUDY/Algorithm

[백준] 15664 N과 M(10) python

sinawi95 2022. 2. 24. 20:32
728x90

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

 

15664번: N과 M (10)

한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해

www.acmicpc.net

백트래킹이 너무 부족해서 쉬운문제부터 다시 시작...

def backtrack(ind, limit, prev):
    global nums, answer, visit
    if ind == limit:
        tmp = tuple([nums[i] for i, v in enumerate(visit) if v])
        if tmp not in answer:
            print(*tmp)
            answer.add(tmp)
        return
    for i in range(prev + 1, len(nums)):
        if visit[i]: continue
        visit[i] = 1
        backtrack(ind+1, limit, i)
        visit[i] = 0
        

def main():
    global nums, answer, visit
    N, M = map(int, input().split())
    nums = sorted(map(int, input().split()))
    answer = set()
    visit = [0 for _ in range(N)]
    backtrack(0, M, -1)


if __name__=="__main__":
    main()