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()
뭔가 비효율적으로 짜고 있는 듯 하다
'STUDY > Algorithm' 카테고리의 다른 글
[백준]15684 사다리 조작 C++, python (0) | 2022.01.28 |
---|---|
[백준] 15666 N과 M(12) python (0) | 2022.01.27 |
[백준] 15657 N과 M(8) python (0) | 2022.01.27 |
[백준] 15654 N과 M(5) python (0) | 2022.01.27 |
[백준] 3040 백설공주와 일곱 난쟁이 python (0) | 2022.01.27 |