문제 보기
https://www.acmicpc.net/problem/2742
문제
자연수 N이 주어졌을 때, N부터 1까지 한 줄에 하나씩 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 100,000보다 작거나 같은 자연수 N이 주어진다.
출력
첫째 줄부터 N번째 줄 까지 차례대로 출력한다.
풀이방법
매우 쉬운 문제인데
시간 초과가 났다.
이건 내가 C++의 출력에 대해 잘 알지 못했던 탓인데
그게 뭐냐 하면 endl과 '\n'의 차이이다.
C#으로도 코딩 테스트 문제를 많이 풀어봤다면
출력이 많을 경우 StringBuilder를 이용해
하나의 string으로 만들어 단 한 번만 출력하는 것으로
시간 단축을 한다는 것을 알고 있을 것이다.
이는 출력에 시간이 많이 걸리기 때문인데
endl과 '\n'의 출력 시간 차이가 나는 이유도 비슷하다.
cout << "안녕하세요"라고 입력했다고 생각하자.
그러면 우리가 쓴 글자가 버퍼에 담겨 출력되기를 기다리고 있을 것이다.
여기서 뒤에 endl이 들어간다면
버퍼는 바로 비워진다(출력된다)
참고로 이렇게 버퍼가 비워지는 것을 flush라고 한다.
그러나 뒤에 오는 것이 \n이라면
개행 문자가 버퍼에 저장 될 뿐, 바로 비워지지 않는다.
이렇게 한 번만 처리하면 될 출력이 endl을 사용할 경우 여러 번 이루어지기 때문에
브론즈 4 문제에서도 시간 초과가 걸리게 되는 것이다!
전체 코드
#include <iostream>
using namespace std;
int main()
{
int N;
cin >> N;
for (int i = N; i > 0; i--)
{
cout << i << '\n';
}
return 0;
}
'ProblemSolve' 카테고리의 다른 글
[백준][C++] 1065 한수 - 실버4 (1) | 2024.01.08 |
---|---|
[백준][C++] 1193 분수찾기 - 실버5 (0) | 2024.01.06 |
[백준][C++] 10757 큰 수 A+B - 브론즈5 (0) | 2024.01.01 |
[백준][C#] 1987 알파벳 - 골드4 (0) | 2023.07.14 |
[백준][C#] 1967 트리의 지름 - 골드4 (1) | 2023.07.13 |