관리 메뉴

민우의 코딩노트

[BOJ 15649] N과 M(1) - C++ 본문

Algorithm/BOJ

[BOJ 15649] N과 M(1) - C++

미미누 2022. 8. 11. 20:36

✅️[문제/problem]
https://www.acmicpc.net/problem/15649

15649번: N과 M (1)

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

www.acmicpc.net


✅️[풀이/Explanation]

백트래킹 문제이다.
재귀함수랑 백트래킹은 유사성이 크다. 일단 isarr 배열로 1~n까지의 숫자가 쓰인 여부를 체크한다. arr 배열은 숫자를 저장할 배열이다.
종료 조건은 k == n일때 숫자를 출력하고 return;을 반환한다.


✅️[코드/code]

#include <bits/stdc++.h>

using namespace std;

int n,m;

bool isused[10];

int arr[10];

void func(int k){

    if(k == m){

        for(int i=0; i<m; i++){

            cout << arr[i] << ' ';

        }

        cout << '\n';

        return;

    }

    

    for(int i=1; i<=n; i++){

        if(!isused[i]){

            arr[k] = i;

            isused[i] = 1;

            func(k+1);

            isused[i] = 0;

        }

    }

    

}

int main() {

    ios::sync_with_stdio(0);

    cin.tie(0);

    

    cin >> n >> m;

    

    func(0);

}

'Algorithm > BOJ' 카테고리의 다른 글

[BOJ 2448] 별 찍기 - C++  (0) 2022.08.11
[BOJ 2667] 단지번호붙이기 - C++  (0) 2022.08.10
[BOJ 2630] 색종이 만들기 - C++  (0) 2022.08.09
2583번 영역구하기 - C++  (0) 2022.08.04
1627번 곱셈 - C++  (0) 2022.08.04