728x90

문제

Hello World!를 출력하시오.

입력

없음

 

출력

Hello World!를 출력하시오.

 

예제 입력 1 

 

예제 출력 1 

Hello World!

 

알고리즘 분류

  • 구현

 

문제 출처

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

 

2557번: Hello World

Hello World!를 출력하시오.

www.acmicpc.net

 


 

문제 해결 방법

  • 간단하게 cout을 이용하여 풀었다.

 

코드

#include <iostream>
using namespace std;

int main() {
    cout << "Hello World!";
    return 0;
}

 

채점 결과

 

참고

  • [단계별로 풀어보기] > [입출력과 사칙연산]

 

cout vs. printf

cout

  • <iostream> 헤더를 불러와야 사용할 수 있다.
  • C++의 스트림 유형의 객체
  • 출력하려는 값의 자료형을 컴파일러가 검사할 수 있다.
  • 출력하려는 값의 형에 따라 적절한 함수를 호출한다.
std::cout << 2 << endl;      // int형 출력 함수 호출
std::cout << 1.5 << endl;    // double형 출력 함수 호출
  • 파일 입출력(fstream)스트링 입출력(stringstream)에서도 표준 입출력과 동일한 인터페이스를 사용하므로 편리하다.
  • printf 에 비해 처리 속도가 느리다.

 

printf

  • <cstdio> 헤더를 불러와야 사용할 수 있다.
  • C의 형식화된 문자열을 표시하는데 주로 사용되는 함수
  • cout과 달리 출력하려는 값의 자료형을 컴파일러가 검사할 수 없다.
    • 버그가 발생할 확률이 높다.
  • cout 에 비해 처리 속도가 빠르다. 
    • 일반적으로 cin/cout/endl scanf/printf/\n 보다 속도가 느리다고 보면 된다.

 

시간 차이?

  • C++에서 C의 stdio buffer를 동기화하는 과정에서 딜레이가 발생하기 때문에 cout printf 간에 시간 차이가 발생한다.
  • 이러한 시간 차이를 극복하기 위해서 다음과 같은 방법을 사용할 수 있다.
① 개행 시, endl 이 아닌 \n 사용하기
  • cout 을 사용하면서 개행 시에 flush가 불필요하게 호출되지 않게 endl 보다는 \n 을 사용한다.
cout << "Hello World!" << endl;
cout << "Hello World! \n";

 

cout.tie(NULL); 또는 sync_with_stdio(false); 사용하기
  • C와 비슷하게 가속시켜주지만, 해당 함수를 선언한 뒤에는 printf scanf 와 같은 C 표준 입출력을 사용할 수 없게 된다.
int main() {
    cout.tie(NULL);
    ios_base::sync_with_stdio(false);
}

 

무엇을 사용하는 것이 나을까?

  • 시간적인 측면을 배제하고, 안정성, 에러, 확장성과 상속을 생각했을 때 <iostream><cstdio> 보다 낫다.

 

① Type Safe
  • <iostream> : 컴파일러가 I/O 되는 객체 타입을 static 하게 알 수 있다.
  • <cstdio> : % 토큰을 써서 type를 dynamic 하게 알아낸다.

 

② Less Error Prone
  • <iostream> : % 토큰을 쓰지 않기 때문에 에러를 줄일 수 있다.
  • <cstdio> : % 토큰을 쓰기 때문에 형식 지정자가 실제로 입출력할 객체와 일치해야 한다.

 

③ Extensible
  • <iostream> : 기존의 코드를 바꾸지 않고 사용자가 정의한 타입을 입출력할 수 있다.
  • <cstdio> : 그렇지 않다.

 

 

④ Inheritable
  • <iostream> : std::ostream 이나 std::istream 같은 Real Class로부터 만들어졌기 때문에 상속이 가능하다.
    • 사용자가 정의한 것들도 stream처럼 보이고, stream처럼 작용한다.
  • <cstdio> : FILE* 같은 경우 상속이 불가능하다.

 

내용 출처 : Click

728x90

'Problem Solving > BOJ' 카테고리의 다른 글

[BOJ-10869][C++] 사칙연산  (0) 2022.07.07
[BOJ-1008][C++] A/B  (0) 2022.07.07
[BOJ-10998][C++] A×B  (0) 2022.07.07
[BOJ-1001][C++] A-B  (0) 2022.07.07
[BOJ-1000][C++] A+B  (0) 2022.07.07
[BOJ-10172][C++] 개  (0) 2022.07.07
[BOJ-10171][C++] 고양이  (0) 2022.07.06
[BOJ-10718][C++] We love kriii  (0) 2022.07.06