STUDY/Algorithm

[백준] 15663 N과 M(9) python

sinawi95 2022. 1. 27. 10:51
728x90

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

 

15663번: N과 M (9)

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

www.acmicpc.net

백트래킹 문제 3

# N & M (9)
import sys; input = sys.stdin.readline
def backtrack(lst=None):
    global N, M, nums, visit, answer
    if lst is None:
        lst = []
    if len(lst) == M:
        answer.add(tuple([nums[i] for i in lst]))
        return

    for i in range(N):
        if visit[i]: continue
        visit[i] = True
        lst.append(i)
        backtrack(lst)
        lst.pop()
        visit[i] = False


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

    print('\n'.join(map(lambda t:' '.join(map(str, t)), sorted(answer))))

if __name__ == '__main__':
    main()

뭔가 비효율적으로 짜고 있는 듯 하다