본문 바로가기
Problem Solving/BOJ

[Backtracking] 15666 N과 M(12)

by Bokoo14 2022. 12. 30.

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

 

15666번: N과 M (12)

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

www.acmicpc.net

 

import sys
input = sys.stdin.readline

n, m = map(int, input().split())
number = sorted(list(map(int, input().split())))

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

    tmp = 0
    for i in range(start, n):
        if tmp !=number[i]:
            tmp = number[i]
            answer.append(number[i])
            backtracking(i)
            answer.pop()


backtracking(0)

key point!

1. 고른 수열은 비내림차순이어야 한다.

길이가 K인 수열 A가 A1 ≤ A2 ≤ ... ≤ AK-1 ≤ AK를 만족하면, 비내림차순이라고 한다.

-> backtracking함수의 매개변수를 통해 비내림차순으로 탐색

 

2. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다.

-> tmp라는 임시 변수를 통해 중복되는 수열을 제거

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

[DFS] 11725 트리의 부모 찾기  (0) 2023.01.01
[Greedy] 16953 A->B  (1) 2022.12.31
[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