[알고리즘/백준] 2741번 :: N 찍기 (C++)
문제 ✍🏻 :: [2741번] N 찍기
자연수 N을 입력받아 1부터 N까지 한 줄에 하나씩 출력하는 프로그램을 작성
알고리즘 (접근방법) 💻
자연수 n을 입력받아 1부터 n까지 한 줄씩 출력하는 것이다. 이는 for문 내의 i를 하나씩 출력하면 된다.
🚨주의할 점🚨
평소대로 for(i = 0; i < n; i++)
으로 했다간 틀릴 수 있다. 문제에서는 1부터 나와야 하고, n까지 다 나와야 하므로, for(i = 1; i <= n; i++)
으로 적어야 한다. (항상 문제를 잘 읽는 것이 중요하다.)
- 참고
줄바꿈으로endl;
을 사용하는 경우 시간초과가 뜬다!! 웬만하면\n
을 쓸 것. (이전 문제 15552번에도 설명이 나와있다)
💡1번째 시도💡
#include <iostream>
using namespace std;
int main()
{
int n, i;
cin >> n;
for (i = 1; i <= n; i++) {
cout << i << "\n";
}
return 0;
}
결과 : 성공!
💡2번째 시도 : 동기화 해제한 후의 코드💡
어제 배웠던 cin.tie(NULL);
와 ios_base::sync_with_stdio(false);
를 활용해서 재작성해보았다.
cin.tie(NULL);
- 메인 함수 첫 줄에 선언
- cin과 cout 묶음을 풀어주는 구문
- cin으로 데이터를 읽을 때 출력 버퍼에 있는 내용을 비우는데 비우지 않고 먼저 입력
ios_base::sync_with_stdio(false);
- C와 C++버퍼 분리 역할
#include <iostream>
using namespace std;
int main()
{
cin.tie(NULL);
ios_base::sync_with_stdio(false);
int t, i, a, b;
cin >> t;
for (i = 0; i < t; i++) {
cin >> a >> b;
cout << a + b << "\n";
}
return 0;
}
결과 : 성공!
1번째와 다른 점이 있다면 시간이 4ms 더 줄었다!
1번째 시도 : 12ms
2번째 시도 : 8ms
💡마지막 시도 : 리뷰 후, 다시 작성💡
단순히 알고리즘 문제니까 상관없어서 아무생각없이 cin.tie(NULL);
와 ios_base::sync_with_stdio(false);
를 모두 썼다. 그런데 찾아보니까 굳이 cin.tie(NULL) 을 쓸 필요가 없었다... (오늘도 Stranger's LAB 을 참고했다!)
🧐이유
tie()
: 입력과 출력의 연결을 끊어주는 것
- 입출력이 반복적으로 있을 때는 연결을 끊어주는 게 맞지만, 이 문제는 처음 입력 후, 출력만 있다.
- 따라서 서로 연결을 끊어주어도 의미❌ 쓸 필요 ❌
- cin.tie(NULL); 이나 cout.tie(NULL)을 삽입하여 제출하더라도 위 코드와 성능 결과가 같게 나온다고 해서 다시 작성했다.
#include <iostream>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
int t, i, a, b;
cin >> t;
for (i = 0; i < t; i++) {
cin >> a >> b;
cout << a + b << "\n";
}
return 0;
}
회고 🤔
cin.tie(NULL);
와 ios_base::sync_with_stdio(false);
를 어제 배웠는데 다음문제에서 활용하고 성능 차이를 보니까 어제 한 게 헛된 게 아닌 느낌이 들었다.
그래도 제대로 알고 써야겠다고 반성했다! 문제 다 풀고 넘어갔으면 모를뻔했다. 혹시나 하고 찾아본 나 자신 잘했어!
Reference
Author And Source
이 문제에 관하여([알고리즘/백준] 2741번 :: N 찍기 (C++)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@miiingirok/알고리즘백준-2741번-N-찍기-C저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)