백준 15649 c++

xx.xx·2023년 1월 12일
0

코딩테스트

목록 보기
5/8

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을 입력 받아서 출력하는 문제인데...
벡터를 써서 한 건 정답 처리를 받았으나
벡터 안 쓴 건 오답 처리가 됐다.. ㅜㅜ
이유는 더 고민해 봐야지..

0개의 댓글