https://www.acmicpc.net/problem/15649
Vector
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <vector>
using namespace std;
vector<int>vec;
int visited[9]; //중복검사
int arr[8];
int N, M;
void Print() {
for (int i = 0; i < vec.size(); i++) {
cout << vec[i] << " ";
}
cout << '\n';
return;
}
void reCall(int cnt) { // 1
if (M == cnt) {
Print();
return;
}//printf("");
for (int i = 1; i <= N; i++) {
if (visited[i] != -1) //쓴 적이 있다면 (-1은 한 번도 접근 안 한 거)
continue;
visited[i] = 1; // visit 표시하기
//vec.push_back(arr[i]); //담기
vec.push_back(i); //담기
reCall(cnt + 1); // 1234 다 돌면 하나 나와서 > 1243
vec.pop_back();
visited[i] = -1;
}
}
int main() {
cin >> N >> M; // 사용가능한 숫자 N 자릿수 M개
//scanf("%d %d", &N, &M);
for (int i = 0; i < M; i++) {
arr[i] = i + 1;// 자릿수
}
for (int i = 0; i <= N; i++) {
visited[i] = -1;
}
int cnt = 1;
reCall(0);
return 0;
}
Vector 안 쓴 문제
#define _CRT_SECURE_NO_WARNINGS
using namespace std;
#include <iostream>
#include <vector>
int N, M;
int checkList[9];
int arr[9] = { 0,1,2,3,4,5,6,7,8 };
void Print() {
for (int i = 1; i <= N; i++) {
if (checkList[i] == 1) {
cout << arr[i] <<" ";
}
}
cout << '\n';
return;
}
void callbk(int cnt) { //1이 들어옴
if (cnt == M) {
Print();
return;
}printf("\n");
for (int i = 1; i <= N; i++) {
if (checkList[i] != -1) { //접근한 적이 있다면
continue;
}
checkList[i] = 1;
callbk(cnt + 1);
checkList[i] = -1;
}
}
int main() {
cin >> N >> M;
for (int i = 0; i <= N; i++) {
checkList[i] = -1;
}
callbk(0);
return 0;
}
N, M을 입력 받아서 출력하는 문제인데...
벡터를 써서 한 건 정답 처리를 받았으나
벡터 안 쓴 건 오답 처리가 됐다.. ㅜㅜ
이유는 더 고민해 봐야지..