백준 문제풀이

2741번 : N 찍기

하다블 2022. 5. 6. 18:58
반응형

문제는 다음과 같습니다.

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

 

2741번: N 찍기

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

www.acmicpc.net

 

풀이는 다음과 같습니다.

#include <iostream>
using namespace std;

int main() {
	int n;
	cin>>n;
	for(int i{0};i<n;i++)
	{
		cout<<i+1<<"\n";
	}
	return 0;
}

언듯보면 간단하지만 이 문제의 핵심은 std::endl 을 사용하면 시간초과가 뜬다는 점입니다.

endl 명령어를 사용한 코드는 다음과 같습니다.

#include <iostream>
using namespace std;

int main() {
	int n;
	cin>>n;
	for(int i{0};i<n;i++)
	{
		cout<<i+1<<endl;
	}
	return 0;
}

사람이 보기에는 "\n" 을 endl;로 적었고 두 명령어 모두 줄 바꿈을 한다는 점에서 같을 것이라 생각하지만

다음처럼 시간초과되는 일이 발생합니다.

이는 endl이 출력 버퍼를 비워주는 과정이 포함되어 있어 \n 보다 수행시간이 길기 때문입니다.

for문을 30번 돌릴 때 \n과 endl을 사용하였을 때의 수행시간을 비교하면 다음과 같습니다.

따라서 수행시간에 유의하여 \n을 사용하여야 이번 문제를 맞출 수 있습니다.

반응형