본문 바로가기

잡다한 기술

[백준 알고리즘 2741]N 찍기




# 문제


문제


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

입력

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

출력

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

예제

예제 입력

 5

예제 출

1

2

3

4

5



# 소스


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
using namespace std;
 
int main(void) {
    // 사용자에게 입력받을 값
    int InputUserValue = 0;
 
    // 처음 사용자에게 값을 받고 아닐경우 다시 받음
    do
    {
        InputUserValue = 0;
        // cin 대신 scanf_s를 사용
        scanf_s("%d"&InputUserValue, sizeof(int));
    } while ((InputUserValue < 0|| (InputUserValue > 100000));
 
    // 출력
    for (int i = 1; i <= InputUserValue; i++) {
        printf("%d\n", i);
    }
 
    return 0;
}
cs


# cin과 cout을 사용하지 않고 printf와 scanf_s를 사용한 이유


처음 이 문제를 받고 나서

"와 이거 뭐야 되게 간단하네?"

하고 풀었다.


그리고 사이트에 제출을 하니

"시간 초과"라는 오류가 뜨더라.


좀 당황 스러웠지만

뭔가 더 간단히 표현가능한 알고리즘이 있는줄 알고

생각을 해보았지만, 도저히 알수가 없었다.


그래서 하고싶지 않았지만 검색을 해보았다.

cin과 cout 대신에 printf와 scanf_s를 사용해 보라고 했다.


사용했더니, 잘된다.

아주 잘 동작한다.


그 이유를 찾아 보았다.


'endl'로 줄을 바꿔주는 것 보다 '\n'이 훨씰 빠르다고 한다.


진짜 과연 그럴까?

테스트를 해보았다.


조건은 출력 값 1부터 100,000까지 출력 할 것이고

시간은 ms로 측정할 것이다.



1) cin과 cout을 사용했을 경우 




2) printf와 scanf를 사용했을 경우





확실히 빠르단걸 알수 있다.

속도가 거의 3배 이상 차이가 난다.


앞으로 알고리즘 문제 풀때는 printf와 scanf_s를 애용해야겠다.



# 마무리


위 포스트는 제가 직접 제작한 것 입니다.

그렇기 때문에 틀린점이나 설명이 엉성한 점이 존재할 수 있습니다.

만약 틀린점이나 설명이 엉성한 부분이 존재하면 댓글로 알려주세요.

빠른 처리 하도록 하겠습니다.


티스토리 앱으로는 댓글 이용이 불가능 하므로 웹 브라우저로 봐 주세요

(URL : http://junprogramer.tistory.com/)


읽어주셔서 감사합니다.