본문 바로가기

공부기록/C, C++

[BOJ] 입출력 A+B 문제 C++

알고리즘 문제풀기 소모임을 시작했다.
C++로 코딩해본적이 없어서, C++ 공부와 병행해야 한다.
일단 이번주는 입출력문제만 있기 때문에 가벼운 마음으로 시작.

 

0. c++ 컴파일

$ g++ -std=c++11 main.cpp -o main

 

1. 2557번_Hello World

#include <iostream>

int main()
{
    std::cout << "Hello World!" << std::endl;
    return 0;
}
  • namespace
    • 어떤 정의된 객체에 대해 어디 소속인지 지정해주는 것과 동일함.
    • std라는 namespace에 정의되어 있는 cout 이라는 의미
  • namespace를 정의하는 방법
  • 이름을 지정하지 않고 namesapce를 만들면, 그 namespace는 해당 파일에서만 쓸 수 있다. static 선언처럼.

2. 1000번 & 2558번 A+B

#include <iostream>
   
int main()
{
    int a, b;
    std::cin >> a >> b;
    std::cout << a + b << std::endl;
       
    return 0;
}
  • 변수선언, cin 사용
  • 1000번은 공백으로 A, B가 구분되어 있고, 2558은 개행으로 두 수가 구분되어 있다.
  • 코드는 두 문제를 동일하게 작성해도 통과할 수 있다.

3. 10950번_A+B-3

#include <iostream>

int main()
{
    int	i, T, a, b;

    std::cin >> T;

    for (i = 0; i < T; i++)
    {
        std::cin >> a >> b;
        std::cout << a + b << std::endl;
    }
    return 0;
}
  • 반복문 사용

4. 10951번_A+B-4

#include <iostream>
using namespace std;

int main()
{
    int	a, b;

    while (1)
    {
        cin >> a >> b;
        if (cin.eof())
        break;
        cout << a + b << endl;
    }
    return 0;
}
  • using namespace std 선언해주면, std::cin 에서 std:: 생략하고 사용 가능 
  • c++의 EOF 감지는 if(cin.eof()) 로 확인
  • UNIX의 EOF 는 ctrl + d로 입력함

5. 10952번_A+B-5

#include <iostream>

int main()
{
    int	a, b;

    while (1)
    {
        std::cin >> a >> b;
        if (a == 0 && b == 0)
        break;
        std::cout << a + b << std::endl;
    }
    return 0;
}
  • 별거 없는 비슷한 문제
  • 0 0이 입력되면 프로그램 종료되는 것으로 종료 조건이 명시되어 있었다.

6. 10953번_A+B-6

#include <iostream>

int main()
{
    int		a, b;
    char	c;

    std::cin >> a >> c >> b;
    std::cout << a + b << std::endl;

    return (0);
}
  • A와 B 사이에 콤마가 들어가는 입력 형태이다.
  • 어떻게 해야할지 감이 안와서 구글링을 해봤다. 사람마다 다르게 짠 것 같다.
    • std::cin >> a >> c >> b;
    • std::cin >> s;
      • 입력받는 s를 string s로 받아서, 문자열 슬라이싱으로 a, b 추출 후 계산
    • scanf("%d%c%d",&A,&c,&B); 이렇게 c언어처럼 scanf 를 쓸 수도 있다.

7. 15552번_빠른 A+B

#include <iostream>
using namespace std;

int main()
{
    int T, i;
    int a, b;
    cin.tie(NULL);
    ios::sync_with_stdio(false);
    
    cin >> T;
    for (i = 0; i < T; i++)
    {
        cin >> a >> b;
        cout << a + b << '\n';
    }
    
    return 0;
}
  • 출력 부분의 '\n' 을 endl 로 쓰면 시간초과
ios_base::sync_with_stdio(false);
cin.tie(NULL)

👆 이 두 옵션에 대해서는, 설명이 잘 된 링크가 있어서 링크로 대체

[reference]

en.cppreference.com/w/

 

cppreference.com

Null-terminated strings:    byte  −   multibyte  −   wide

en.cppreference.com

modoocode.com/135

 

씹어먹는 C++ 강좌 계획

 

modoocode.com

👇 알고리즘 공부 순서 추천

plzrun.tistory.com/entry/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4PS-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0

 

알고리즘 문제풀이(PS) 시작하기

이런건 고수들이나 써야 하지 않나 싶지만, 그래도 1년정도 공부하면서 이 분야를 어떻게 시작해야 할지 써보려 한다. 라고 운을 뗀다음 열심히 내 얘기만 했던 후속편이다. 내 인생사가 궁금하�

plzrun.tistory.com