[백준]15649번 N과 M (1) - 백트래킹
SW개발/코딩테스트

[백준]15649번 N과 M (1) - 백트래킹

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

 

15649번: N과 M (1)

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

www.acmicpc.net

 

 

n, m = map(int, input().split())

visited = [False] * n
arr = []


def dfs(cnt):
    # 수열이 m 자리수가 되면 종료
    if cnt == m:
        print(*arr)  # 리스트내의 모든 원소 출력
        return

    for i in range(n):
        if visited[i]:  # 이미 사용한 수라면, 방문했다면
            continue

        arr.append(i + 1)  # 수열에 추가
        visited[i] = True  # 사용한 수(방문) 체크

        dfs(cnt + 1)  # 다음 수열을 위한 재귀함수

        arr.pop()  # 수열의 마지막 자리 삭제
        visited[i] = False  # 사용한 수 초기화


dfs(0)

 

728x90