Taene's

[백준] 브론즈V-N 찍기 C++ 2741번 본문

백준/브론즈

[백준] 브론즈V-N 찍기 C++ 2741번

taene_ 2023. 8. 22. 21:41

문제

자연수 N이 주어졌을 때, 1부터 N까지 한 줄에 하나씩 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 100,000보다 작거나 같은 자연수 N이 주어진다.

출력

첫째 줄부터 N번째 줄 까지 차례대로 출력한다.

예제 입력 1 복사

5

예제 출력 1 복사

1
2
3
4
5

 

처음 소스코드: 시간초과

#include <iostream>

using namespace std;

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);

	unsigned int n;
	cin >> n;
	for (int i = 1; i <= n; i++)
	{
		cout << i << endl;
	}

	return 0;
}

 

최종 소스코드:

#include <iostream>

using namespace std;

int main()
{
	ios::sync_with_stdio(false);

	unsigned int n;
	cin >> n;
	for (int i = 1; i <= n; i++)
	{
		cout << i << "\n";
	}

	return 0;
}

접근방법: 단순한 입출력 문제이지만, std::endl은 단순히 개행만 하는 것이 아닌 버퍼를 비우는 작업도 같이 하기 때문에 시간초과가 걸리므로, "\n"을 사용해줘야 한다.

알게된 점: 여기서 cin.tie(NULL) 이나 cout.tie(NULL) 을 사용하지 않는 이유는 tie()는 '입력과 출력' 연결을 끊어주는 것으로, cin 입력이 들어오면 자동적으로 출력 버퍼를 비우게 된다. 즉, 입출력이 반복적으로 있을 땐 연결을 끊어주는 것이 맞지만, 이 문제는 처음에만 입력하고 그 뒤엔 출력만 있으므로 cin.tie(NULL);이나 cout.tie(NULLL)을 써준 것과 안 쓴 것은 성능이 같다.