본문 바로가기
Algorithm/C++

[백준 15654] N과 M (5)

by imagineer_jinny 2022. 9. 16.

15654번: N과 M (5) (acmicpc.net)

 

15654번: N과 M (5)

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

www.acmicpc.net

 

배운것

int arr[] 를 sort 할 때 : 

sort(arr, arr+n);

 

vetor<int> arr를 sort할 때:

sort(arr.begin(), arr.end())

 

내 풀이

#include <bits/stdc++.h>
using namespace std;


int n, m;
int a[10];
int t[10];
bool isused[10];
void func(int k) { // 현재 k개까지 수를 택했음.
    if (k == m)
    {
        for (int i = 0; i < m; i++)
        {
            cout << t[i] << ' ';
        }
        cout << '\n';

        return;
    }

    for (int i = 0; i < n; i++)
    {
        if (!isused[i])
        {
            t[k] = a[i];
            isused[i] = 1;
            func(k + 1);
            isused[i] = 0;
        }

    }


}

int main(void) {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin >> n >> m;
    for (int i = 0; i < n; i++)
    {
        cin >> a[i];
    }

    sort(a, a+n);
    func(0);
}

 

 

정답 코드

// Authored by : BaaaaaaaaaaarkingDog
// Co-authored by : -
// http://boj.kr/31394e22027f4d4f87affb939d24df91
#include <bits/stdc++.h>
using namespace std;

int n, m;
int arr[10];
bool isused[10];
int num[10];

void func(int k){ // 현재 k개까지 수를 택했음.
  if(k == m){ // m개를 모두 택했으면
    for(int i = 0; i < m; i++)
      cout << num[arr[i]] << ' '; // arr에 기록해둔 인덱스에 대응되는 수를 출력
    cout << '\n';
    return;
  }

  for(int i = 0; i < n; i++){ // 0부터 n-1까지의 인덱스에 대해
    if(!isused[i]){ // 아직 i가 사용되지 않았으면
      arr[k] = i; // k번째 인덱스를 i로 정함
      isused[i] = 1; // i를 사용되었다고 표시
      func(k+1); // 다음 인덱스를 정하러 한 단계 더 들어감
      isused[i] = 0; // k번째 인덱스를 i로 정한 모든 경우에 대해 다 확인했으니 i를 이제 사용되지않았다고 명시함.
    }
  }
}

int main(void){
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> m;
  for(int i = 0; i < n; i++) cin >> num[i];
  sort(num, num+n); // 수 정렬
  func(0);
}

'Algorithm > C++' 카테고리의 다른 글

[백준 15655] N과 M (6)  (0) 2022.09.19
[백준 15656] N과 M (7)  (0) 2022.09.19
[백준 15652] N과 M (4)  (0) 2022.09.16
[백준 15651] N과 M (3)  (0) 2022.09.16
[백준 15650] N과 M (2)  (0) 2022.09.16

댓글