[백준] 15649 N과 M

leejihun·2022년 5월 24일
0

알고리즘

목록 보기
9/50

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

#include<iostream>
using namespace std;

int N, M;
int iArr[10];
bool iCheck[10];


void dfs(int k)
{
	if (k == M) //  m의 수에 다다랐을떄
	{
		for (int i = 0; i < M; i++)
		{
			cout << iArr[i] << " ";
		}
		cout << "\n";
	}
	else
	{
		for (int i = 1; i <= N; i++)
		{
			if (!iCheck[i])
			{
				iCheck[i] = true;
				iArr[k] = i;
				dfs(k + 1);
				iCheck[i] = false;
			}
		}
	}
}

int main()
{


	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	cin >> N >> M;
	dfs(0);

}

백트래킹 기본문제

백준 풀이에 제출했을때 시간초과가 계속 나길래
잘못 푼줄 알고 한참봤다 ..

근데 cout << endl --> cout << "\n" 로 바꿔주니
해결됐다. 이해가 안돼서 찾아봤더니

std::endl 와 ‘\n’가 ' Flush '를 하느냐 안하느냐의 차이가 있습니다.

여기서 ' Flush ' 란 버퍼에 담긴 데이터가 모두 쏟아지는 것을 말한다.

즉 이들 사이의 주요 차이점 endl은 호출될 때마다 출력 버퍼가 플러시되는 반면 \n그렇지는 않다는 것입니다.

std::endl의 특징

  • std::endl을 사용하면, 커서를 다음 줄로 옮기고, 출력을 "Flush"하는 두 가지 작업을 하기 때문에, 약간 비효율적임

    (std::endl의 역할인 Flush는 화면에 결과물이 모두 그리고, 즉시 나타나는지 확실히 해야 하는 일을 함)

  • 왜냐면 std::cout을 사용하여 콘솔에 텍스트를 쓸 때, std::cout은 텍스트를 보통 어떻게서든 출력하여 쏟아냄

  • 만약에 std::cout으로 출력이 되지 않다면, 텍스트가 중요하지 않다는 뜻

  • 그래서 일반적인 텍스트 출력 시, std::endl가, " Flush했는가? "는 것은 거의 중요하지 않게 됨

결론 : endl의 성능이 더 나쁘다.

https://www.educative.io/edpresso/what-is-the-difference-between-endl-and-n-in-cpp
https://heroine-day.tistory.com/50
https://yechoi.tistory.com/48

profile
U+221E

0개의 댓글