백준 2741번 [ N 찍기 ]

홍수민·2023년 1월 2일
0

BAEKJOON이다

목록 보기
2/18

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


이 문제도 너무 쉬워서 바로 맞았습니다!! 받을 줄 알았다.

그런데 시간초과가 계속 뜨는 것이다 ㅜㅠㅠㅠ

검색해보고 5번째만에 통과했다 ㅠ

그 이유는 C++에서 cin cout는 printf scanf 보다 느리단다.. 왜!! 왜구런거야!!!

아무튼 그렇다고 한다 ..ㅜㅠ

그런데 cin cout 쓰고도 통과하는 경우가 있다(2번 코드)

1번째 코드

#include <iostream>
using namespace std;

int main(){
    int N;
    scanf("%d", &N);
    
    if((N>=1)&&(N<=100000)){
      for(int i=0; i<N; i++){
         printf("%d\n", i+1);
      }
    }
    
    return 0;
}

-> printf와 scanf만을 사용했다

2번째 코드

#include <iostream>
using namespace std;

int main(){
	int N;
	cin >> N;

	for (int i=0; i<N; i++){
		cout << i + 1 << "\n";
	}
    
    return 0;
}

-> 다른 사람 코드임!
-> cin과 cout를 사용했는데도 통과했다. 이유는 endl를 "\n"으로 대체했기 때문이다. endl를 쓰면 시간초과가 뜬다.

그럼 이 내용을 토대로 새로운 코드 작성!

기존의 틀린 코드

#include <iostream>
using namespace std;

int main(){
    int N;
    cin >> N;
    
    if((N>=1)&&(N<=100000)){
      for(int i=0; i<N; i++){
         cout << i+1 << endl;
      }
    }
    
    return 0;
}

-> 시간초과 !!

바꾸어 보장

#include <iostream>
using namespace std;

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

-> 맞았습니다!!

신기하다! endl을 "\n"으로 바꿔주기만 해도 통과했다. 뭔가 C++ 보다 C 스럽게 적어주면 시간을 덜 잡아먹는 느낌이당

profile
수만이다

0개의 댓글