새소식

인기 검색어

Algorithm/C++

[2741] N 찍기 (시간 초과 날 경우)

  • -
시간 제한메모리 제한제출정답맞은 사람정답 비율
1 초128 MB82362351153035045.108%

문제

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

입력

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

출력

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

예제 입력 1 

5

예제 출력 1 

1
2
3
4
5



정~말 쉬운 문제이다.

하지만 이것도 코드를 제출하니 "시간 초과" 에러가 났다. 하.. 도대체 뭘까.. 싶어서 알아봤다.


결과적으로 C를 사용하면 상관이 없지만 C++을 사용할 경우에는 오류가 날 수 있더라.

C++의 'cin' 과 'cout' 이 C의 'scanf' 와 'printf' 에 비해서 굉장히 속도가 느리다고 한다.


'#include<iostream>' 이 C++ 환경에서도 C 함수를 쓸 수 있도록  '#include<cstdio>'를 포함시키면서 굉장히 느려진다고 한다.


제일 좋은 방식은 시간 초과가 나는 경우 'cin' 이나 'cout' 대신 'scanf' 와 'printf'를 쓰는 것이지만..

굳이 사용하고 싶다면 소스 코드 위쪽에 요놈들을 적자.


sync_with_stdio(false);
cin.tie(null);

대신 이경우 'cstdio'를 싱크시키지 않기때문에 C에서의 함수는 사용할 수 없다.

위 코드 사용시 주의사항
  1. 'scanf', 'printf'와 섞어서 사용하지 말 것
  2. 싱글 쓰레드 환경에서만 사용할 것 (PS용으론 상관없지만, 실무에서는 쓰지 말 것)

그냥 웬만해서 시간초과가 난다면 'printf', 'scanf' 등의 C 표준 입출력 함수들을 사용하자.. ㅠㅠ


실패한 코드

//2741
#include ⁢iostream>

using namespace std;

int main() {
	int n;

	cin >> n;

	for (int i = 0; i < n; i++) {
		cout << i + 1 << endl;
	}

	return 0;
}


성공한 코드

//2741
#include ⁢⁢⁢iostream>

using namespace std;

int main() {
	int n;
	
	scanf("%d", &n);

	for (int i = 0; i < n; i++) {
		printf("%d\n", i + 1);
	}

	return 0;
}

'Algorithm > C++' 카테고리의 다른 글

[1699] 제곱수의 합  (0) 2019.04.03
[10951] A+B - 4 (입력 종료 조건이 없을 때)  (0) 2019.03.19
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.