본문 바로가기
Problem Solving/BOJ

[Backtracking] BOJ 15650 N과 M(2)

by Bokoo14 2022. 12. 30.

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

 

15650번: N과 M (2)

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

www.acmicpc.net

#2022.12.29
import sys
input=sys.stdin.readline

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

answer = []
def backtracking(start):
    if len(answer)==m:
        print(' '.join(map(str, answer)))

    for i in range(start, n+1):
        if i not in answer:
            answer.append(i)
            backtracking(i+1)
            answer.pop() # 백트래킹

backtracking(1)

 

1. n, m을 입력받음

2. answer이라는 배열에 수열 append

3. len이 원하는 값(m)이라면 print해줌

4. for문을 돌며 순차적으로 수열을 검사해줌

5. backtracking함수에 매개변수를 활용 -> backtracking(i+1)을 통해 오름차순 수열만 append해줌

6. answer.pop()을 통해 백트래킹

 

'Problem Solving > BOJ' 카테고리의 다른 글

[Backtracking] 15663 N과 M(9)  (0) 2022.12.30
[Backtracking] 15657 N과 M(8)  (0) 2022.12.30
[Backtracking] 15654 N과 M(5)  (0) 2022.12.30
[Backtracking] 15652 N과 M(4)  (0) 2022.12.30
[Backtracking] 15649 N과 M(1)  (1) 2022.12.30