관리 메뉴

fatalite

N과 M(1) - 백준 15649 본문

코딩 인터뷰/C++

N과 M(1) - 백준 15649

fataliteforu 2023. 2. 27. 09:20

Problem

< 실버 3 >

백 트래킹, 완전 탐색


Solution

#include <iostream>
#include <vector>

int n, m;
int selected[10];
using namespace std;

void Select(int start, int end, vector<int> v) {
    if (start == end) {
        for (int a : v) {
            cout << a << " ";
        }
        cout << "\n";
    }
    else {
            //left의 모든 원소중 하나만을 v에 추가
            for (int i = 1; i <= n; i++) {
                if (selected[i] == false){
                    vector<int> tmpv = v;
                    tmpv.push_back(i);
                    selected[i] = true;
                    Select(start + 1, end, tmpv);
                    selected[i] = false;
                }
            }
        
    }


}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    cin >> n >> m;
    vector<int> blankVector;
    vector<int> tmp;
    //tmp 1~n
    for (int i = 1; i <= n; i++) {
        tmp.push_back(i);
    }
    Select(0, m, blankVector);
}

Review

(1) cout << endl; 대신cout << "\n"; 을 사용하자. 이거 떄문에 시간 초과 떴었던 것 같음.

(2) Vector Slice 보다는, Selected 배열을 통해서 넣었는지 체크하는게 좀 더 효율적인듯 싶다. (이전 문제 리뷰 반영)

'코딩 인터뷰 > C++' 카테고리의 다른 글

트리 순회 - 백준 1991  (0) 2023.04.08
정수삼각형 - 백준 1932  (0) 2023.04.04
N과 M(6) - 백준 15655  (0) 2023.02.26
N과 M(4) - 백준 15652  (0) 2023.02.26
최소비용 구하기 - 1916 백준  (0) 2023.02.13