문제:
https://www.acmicpc.net/problem/15651
나의 풀이:
#include <iostream>
#include <algorithm>
using namespace std;
int n, m;
int arr[8] = { 1, 1, 1, 1, 1, 1, 1};
/*
1~N까지 자연수중 M개를 고르기
1 1 1
1 1 2
1 1 ...
1 1 N
1 2 1
1 2 2
...
N N N
*/
void backtrack(int k) {
if (k == m) { // 배열 다 채우면
for (int i = 0; i < m; i++) {
cout << arr[i] << " "; // 출력
}
cout << "\n";
return;
}
for (int i = 1; i <= n; i++) { // 범위 : 1~n
arr[k] = i; // k = 0부터 시작해서 재귀호출할것
backtrack(k + 1);
}
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin >> n >> m;
backtrack(0);
return 0;
}
시간복잡도가 큰 코드가 아닌데 첫 제출에서는 시간초과가 떠서 당황했다. 알고리즘 문제가 아닌 단순 입력 처리시간 문제로 보여져 ios_base::sync_with_stdio(false)와 cin.tie(NULL)을 사용해주었다.