문제풀이(Problem Solving)

백준, BOJ, 15654번 C++ [CPP]

게임이 더 좋아 2021. 7. 6. 01:56
반응형
728x170

 

백트래킹의 전형적인 문제

조건을 잘 읽어야 하는 문제

 

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


 

 

#맞은 풀이

#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;

int N, M;

vector<int> vec;
vector<int> ans;
bool check[8];

void func(int cnt) {

    if (cnt == M) {

        for (auto v : ans) {
            cout << v << " ";
        }
        cout << '\n';
        return;
    }

    for (int i = 0; i < N; i++) {
        //선택
        if (check[i] == true)continue;
        ans.push_back(vec[i]);
        check[i] = true;
        //수행
        func(cnt + 1);

        //복원
        ans.pop_back();
        check[i] = false;

    }
    return;
}

int main() {
    cin >> N >> M;



    for (int i = 0; i < N; i++) {
        int a;
        cin >> a;
        vec.push_back(a);
    }

    sort(vec.begin(), vec.end()); // 오름차순정렬
    
    

    func(0);

}

 

 

다 비슷한 문제다.

 

이러한 N이 다 다른 숫자가 주어져서 그렇지

만약 중복되어서 주어진다면..?

예외처리 끔찍하다.

 

 

 

반응형
그리드형

'문제풀이(Problem Solving)' 카테고리의 다른 글

백준, BOJ, 1094번 C++ [CPP]  (0) 2021.08.25
백준, BOJ, 18111번 C++ [CPP]  (0) 2021.08.23
백준, BOJ, 4963번 C++ [CPP]  (0) 2021.07.06
백준, BOJ, 11052번 C++ [CPP]  (0) 2021.06.30
백준, BOJ, 12865번 C++ [CPP]  (0) 2021.06.29