본문 바로가기
Baekjoon/[Code.plus] 알고리즘 기초 2/2

[BOJ/백준] 15654 N과 M (5)

by 해적거북 2021. 9. 8.
728x90

● [문제번호 15654] N과 M (5)

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

 

15654번: N과 M (5)

N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다. N개의 자연수 중에서 M개를 고른 수열

www.acmicpc.net

 

● 알아야 할 것

: DFS (깊이 우선 탐색)

: 재귀

 

● 풀이 과정

: N과 M (1) 에서 num 배열에 입력되는 숫자를 따로 설정한다.

그 외는 동일한 로직이다.

 

● 주의 할 것

: NULL

 

● 참고 할 것

: 15649 N과 M (1)

https://pirateturtle.tistory.com/243

 

● 풀이 코드

#include <bits/stdc++.h>

using namespace std;

// 15649 N과 M (1) 의 차이점 → 출력할 숫자를 입력받는다
// input : 입력된 숫자들
// num : 출력할 숫자 저장
// visited : num 배열에 존재하는 지 확인 (중복 불가능 조건을 위해)
int input[9] = {0, };
int num[9] = {0, };
bool visited[9] = {false, };
int N, M;

// 재귀를 이용한 DFS
void NM(int cnt)
{
    // M개 숫자를 저장한 경우
    if(cnt == M)
    {
        // num 배열의 숫자를 순서대로 출력
        for(int i = 1; i <= M; i++)
            cout << num[i] << " ";
        cout << "\n";
        return ;
    }
    
    // 계속해서 순서대로 숫자를 저장
    for(int i = 1; i <= N; i++)
    {
        // num배열에 없는 숫자인 경우
        if(!visited[i])
        {
            // 1. num 배열에 있다고 표시
            // 2. num 배열에 input 배열의 숫자를 넣고
            // 3. 재귀
            // 4. num 배열에 없다고 표시
            visited[i] = true;
            num[cnt + 1] = input[i];
            NM(cnt + 1);
            visited[i] = false;
        }
    }
}


int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    
    cin >> N >> M;
    
    // 숫자들을 입력 받고
    for(int n = 1; n <= N; n++)
        cin >> input[n];
    
    // 입력된 숫자들을 오름차순으로 정렬
    sort(input + 1, input + N + 1);
    
    // 처음에 num 배열에는 0개의 숫자가 저장되어 있으므로
    NM(0);
    
    return 0;
}

 

 

● [백준] - [알고리즘 기초 2/2] - [520 - 브루트 포스 (N과 M)] 문제집

번호 문제 번호 문제 이름 풀이 링크
1 15649 N과 M (1) https://pirateturtle.tistory.com/243
2 15650 N과 M (2) https://pirateturtle.tistory.com/244
3 15651 N과 M (3) https://pirateturtle.tistory.com/245
4 15652 N과 M (4) https://pirateturtle.tistory.com/246
5 15654 N과 M (5) https://pirateturtle.tistory.com/247
6 15655 N과 M (6) https://pirateturtle.tistory.com/248
7 15656 N과 M (7) https://pirateturtle.tistory.com/249
8 15657 N과 M (8) https://pirateturtle.tistory.com/250
9 15663 N과 M (9) https://pirateturtle.tistory.com/251
10 15664 N과 M (10) https://pirateturtle.tistory.com/252
11 15665 N과 M (11) https://pirateturtle.tistory.com/253
12 15666 N과 M (12) https://pirateturtle.tistory.com/254

 

728x90

'Baekjoon > [Code.plus] 알고리즘 기초 2/2' 카테고리의 다른 글

[BOJ/백준] 15657 N과 M (8)  (0) 2021.09.08
[BOJ/백준] 15656 N과 M (7)  (0) 2021.09.08
[BOJ/백준] 15655 N과 M (6)  (0) 2021.09.08
[BOJ/백준] 15652 N과 M (4)  (0) 2021.09.08
[BOJ/백준] 15651 N과 M (3)  (0) 2021.09.08
[BOJ/백준] 15650 N과 M (2)  (0) 2021.09.08
[BOJ/백준] 15649 N과 M (1)  (0) 2021.09.08

댓글