티스토리 뷰

https://www.acmicpc.net/problem/15649

 

15649번: N과 M (1)

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

www.acmicpc.net

 

 

[백준][C++] 15649 N과 M (1)

 

endl 출력 때문에 시간초과가 났다.

취준생일 때는 항상 '/n' 으로 출력했었는데 최근에는 그냥 신경 안썼는데 신경써야겠다..

 

https://www.acmicpc.net/blog/view/57

 

출력 속도 비교

여러가지 언어와 출력 방법을 이용해서 시간이 얼마나 걸리는지 비교해 보았습니다. 방법: 총 N개의 줄에 1부터 10,000,000까지의 자연수를 한 줄에 하나씩 출력하는 시간을 측정. 10번 측정해서 평

www.acmicpc.net

위 글을 확인해보면,

cout << i << endl;

ios_base::sync_with_stdio(false);
cout << i << '\n';

이 둘 속도가 생각보다 엄청 많이 차이 난다.

 

 

#include <iostream>
#include <vector>
using namespace std;

void dfs(int n, int N, int M, vector<int> out, vector<int> visit) {
	if (n == M) {
		for (int i : out) {
			cout << i << ' ';
		}
		cout << '\n';
		return;
	}

	for (int i = 0; i < N; i++) {
		if (visit[i]) continue;
		visit[i] = 1;
		out.push_back(i + 1);
		dfs(n + 1, N, M, out, visit);
		visit[i] = 0;
		out.pop_back();
	}
}

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);

	int N, M;
	cin >> N >> M;

	vector<int> out;
	vector<int> visit(N, 0);
	dfs(0, N, M, out, visit);

	return 0;
}
댓글