레야몬

[C++] 15654번 N과 M (5) - 백트래킹 본문

알고리즘/백준

[C++] 15654번 N과 M (5) - 백트래킹

Leyamon 2022. 9. 6. 04:10
#include <iostream>
#include <algorithm>

#define MAX_N 9

using namespace std;

bool visit[MAX_N];  //방문하였는가?
int map[MAX_N];  //입력받은 숫자들
int b[MAX_N];  //탐색한 숫자가 저장되는 벡터
int N, M;  //N개의 자연수와 길이가 M인 수열

void f(int m)  //m개를 저장함
{
    if(m==M) {
        for(int i=0; i<m; i++)
            cout << map[b[i]] << ' ';
        cout << '\n';
        return;
    }
    for(int i=0; i<N; i++) {
        if(visit[i]) continue;
        
        visit[i]=true;
        b[m]=i;
        f(m+1);
        visit[i]=false;
    }
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL); cout.tie(NULL);
    
    cin >> N >> M;
    
    for(int i=0; i<N; i++)
        cin >> map[i];
    sort(map, map+N);  //오름차순으로 정렬하기
    f(0);
    
    return 0;
}

 

백트래킹이 맞는 것 같네요. 문제를 풀고나니 왜 이게 백트래킹이지 싶었는데... 암튼 밑에 참고한 사이트가 있어요

 

 

<C++ vector>

https://blockdmask.tistory.com/70

 

[C++] vector container 정리 및 사용법

안녕하세요.  BlockDMask 입니다. 오늘은 C++ STL의 sequence container 중에 정말 자주 쓰는 vector에 대해서 알아보겠습니다. <목차> 1) vector container 란? 2) vector의 사용 3) vector의 생성자와 연산..

blockdmask.tistory.com

 

<C++ sort>

https://m.blog.naver.com/ndb796/221227975229

 

8. C++ STL sort() 함수 다루기 ①

지난 시간까지 선택 정렬, 버블 정렬, 삽입 정렬, 퀵 정렬, 병합 정렬의 개념에 대해 이해하고 간단한 프로...

blog.naver.com

 

 

 

 

※현재 고등학교 등교중인 학생입니다. 이제 알고리즘을 본격적으로 공부하기 시작해서 아직 초보입니다. 혹시 제가 잘못 알고있는 점이나 더 좋은 풀이 방법이 있어 댓글에 남겨주시면 감사히 하나하나 열심히 읽어보겠습니다. 좋아요, 단순한 댓글 한마디라도 저에겐 큰 힘이 됩니다! 감사합니다.

Comments