티스토리 뷰

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

 

15650번: N과 M (2)

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

www.acmicpc.net

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
from itertools import combinations
from copy import deepcopy
 
n, m = map(int, input().split())
# for comb in combinations(range(1, n + 1), m):
#     for i in comb:
#         print(i, end=' ')
#     print()
#
 
 
def backtracking(comb, index, num):
    if len(comb) == num:
        for i in comb:
            print(i, end=' ')
        print()
    elif len(comb) > n:
        return
 
    for i in range(index, n + 1):
        backtracking(comb[:] + [i], i + 1, num)
 
 
backtracking(list(), 1, m)
cs

백트래킹으로 풀면 된다.

파이썬에서는 간단히 combinations를 사용하면 되는데, 이 문제의 목적은 그 내부적인 로직을 이해하는 것이기 때문에 추가로 직접 구현도 했다.

주석 처리한 부분이 combinations를 이용한 간단 해결법

아래 함수가 백트래킹을 이용해서 직접 구현한 방법이다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함