Python | N과 M(1)[백준 15649]

나경호·2022년 11월 27일
0

알고리즘 Algorithm

목록 보기
105/106

N과 M(1)

출처 | N과 M(1)[백준 15649]

문제

자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오.

  • 1부터 N까지 자연수 중에서 중복 없이 M개를 고른 수열

입력

첫째 줄에 자연수 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8)

출력

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

수열은 사전 순으로 증가하는 순서로 출력해야 한다.

***

풀이(순열 사용x, dfs)

from sys import stdin

N, M = map(int, stdin.readline().split())
tmp = []

def backtrack(N, M):

    
    if len(tmp) == M:
        print(' '.join(map(str, tmp)))
        return
    
    for i in range(1, N+1):
        if i not in tmp:
            tmp.append(i)
            backtrack(N, M)
            tmp.pop()

backtrack(N, M)

풀이(순열 메서드 사용, 최종)

from itertools import permutations
from sys import stdin

N, M = map(int, stdin.readline().split())
nPr = []
for i in range(1, N+1):
    nPr.append(str(i))

# for a, b in list(permutations(nPr, 2)):
#     print(a, b)

print("\n".join(list(map(" ".join, list(permutations(nPr, M))))))

출처

알고리즘 분류

profile
기억창고👩‍🌾

0개의 댓글