본문 바로가기
Algorithm/C++

[백준 15663] N과 M(9)

by imagineer_jinny 2022. 9. 28.

15663번: N과 M (9) (acmicpc.net)

 

15663번: N과 M (9)

한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해

www.acmicpc.net

 

배운것

이전 것과 비교해야되는데 마땅히 방법이 떠오르지 않는다면?

임시 변수를 만들 생각을 해보자~

 

정답 코드

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

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

void func(int k) { // 현재 k개까지 수를 택했음.
  if (k == m) {
    for (int i = 0; i < m; ++i) {
      cout << arr[i] << ' ';
    }
    cout << '\n';
    return;
  }
  int tmp = 0;  // 중복 수열인지 확인 하기 위해 필요한 임시 변수
  for (int i = 0; i < n; ++i) {
    if (!isused[i] && tmp != num[i]){ // 이전 수열의 마지막 항과 새로운 수열의 마지막 항이 같으면 중복 수열
      isused[i] = true;
      arr[k] = num[i];
      tmp = arr[k];
      func(k + 1);
      isused[i] = false;
    }
  }
}

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++' 카테고리의 다른 글

[백준 10814] 나이순 정렬  (0) 2022.10.04
[백준 1181] 단어 정렬  (0) 2022.09.28
[백준 15657] N과 M (8)  (0) 2022.09.28
[백준 9095] 1,2,3 더하기  (0) 2022.09.28
[백준 1463] 1로 만들기  (0) 2022.09.28

댓글