문제 정보
백준 ( BOJ ) 15649 N과 M (1)
문제 풀이 : 수열
문제 출처 : https://www.acmicpc.net/problem/15649
시작 Thinking
문제 풀이
이 문제는 가장 기본이 되는 수열 입니다.
모든 수열을 탐색 하는 방법은 재귀로 하며
간단하게 수도코드로 만들면 다음과 같습니다.
fun(k){
if(k==end)
cout all
else
for(i : 0 ~ max )
add i to list
make visited
fun(k+1)
make unvisited
}
위의 방식은 기억 하고 계시면 도움이 될 겁니다.
코드
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int n, m;
int base;
vector<int> v(8, 0);
vector<int> visitied(8, 0);
void fun(int roopedTime) {
if (roopedTime == m) {
for (int i = 0; i < m; i++) {
//cout << v[i] +1 << " ";
printf("%d ", v[i]+1);
}
printf("\n");
}
else {
for (int i = 0; i < n; i++) {
if (visitied[i] == 0) {
v[roopedTime] = i;
visitied[i] = 1;
fun(roopedTime + 1);
visitied[i] = 0;
}
}
}
}
int main() {
cin >> n >> m;
fun(0);
return 0;
}
아 참고로 cout 사용하시면 시간초과 나니, printf