c#언어로 개발해왔기 때문에 c++은 정말 오랜만에 써보는데 코딩테스트는 C#보다는 Python, c++, Java가 유리하다고 한다. 나는 그중에서 그나마 아는게 C++밖에 없기 때문에 C++로 오늘부터 시작해보려고 한다!
백준 난이도 쉬운 문제들로 200문제를 풀어서 일단 언어와 문법에 익숙해지는게 첫번째 목표이다.
그 첫걸음은 국룰인 Hello World! 출력하기
1/200. 2557번
처음에 나는
1. cout을 생각하지 못하고 #include <iostream> 헤더가 필요 없는 줄 알았음
2. Hello World가 문자열이니 반환값이 string이어야 하는거 아닌가?했던 생각 ㅋ
using namespcae std;
string main(){
cout<<Hello World!<<endl;
return 0;
}

이렇게 작성했고 컴파일 에러가 났다. string은 type name이 아니라는 메세지. 그래서 아 이게 아니구나 해서
그다음엔 string-> int로 변경했다
using namespcae std;
int main(){
cout<<Hello World!<<endl;
return 0;
}

역시나 다시 에러난다. cout과 Hello가 선언되지 않았다는 메세지. 아아 드디어 완벽히 뭐가 문젠지 파악했다
#include <iostream>
using namespace std;
int main(){
cout<<"Hello World!"<<endl;
return 0;
}

2/200. 1000번
두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
#include <iostream>
using namespace std;
int main(){
int a,b;
cin>>a>>b;
cout<<a+b<<endl;
return 0;
}
이번엔 한번에 정답
3/200. 10998번
두 정수 A와 B를 입력받은 다음, A×B를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 A와 B가 주어진다. (0 < A, B < 10)
음 입력에서 A,B의 범위가 정해진게 좀 마음에 걸리긴 하는데 일단은 이전 문제에서 했던대로 작성해봤다.
#include <iostream>
using namespace std;
int main(){
int a,b;
cin>>a>>b;
cout<<a*b<<endl;
return 0;
}
오 한번에 정답이다.
그치만 저 범위는 그럼 왜 써있었던걸까? 그냥 정수라는걸 알려주려고? 나의 친구 지피티한테 물어봐야지 ㅎㅎ

그렇다고 한다
만약 범위 체크하는 코드를 작성하고 싶다면
// 입력 범위 검사
if (a > 0 && a < 10 && b > 0 && b < 10) {
cout << a * b << endl;
} else {
cout << "입력값이 범위 밖입니다." << endl;
}
이렇게 작성하면 된다고 합니다.
4/200. 1008번
두 정수 A와 B를 입력받은 다음, A/B를 출력하는 프로그램을 작성하시오.

#include <iostream>
using namespace std;
int main(){
int a,b;
cin>>a>>b;
cout<<a/b<<endl;
return 0;
}

예 그렇다네요
그 소수점을 몇번째 자리까지 표시할건지를 지정해볼까 싶다. 근데 그건 까먹었으니 찾아보자
precision과 fixed로 가능한데
cout.precision(자리수);
cout<<fixed;
이런 형태로 가능하다 precision으로만으로도 자릿 수 지정이 가능하지만 fixed를 쓰는것과 안쓰는건 이런 차이점이 있다.
예를들어
double a = 12.235667; 이라고 했을 때
cout.precision(5);
cout<<a ; //출력 값은 12.235
double a = 1.235667;
cout<<fixed;
cout.precision(5);
cout<<a ; // 출력 값은 12.23566
즉 precision(n)을 사용하면 전체 자릿수를 지정하는 것이지만 fixed를 사용하면 소수점 아래 자릿수를 지정하는 것이다.
cout.precision(n)
- cout 객체의 precision 설정을 바꾸는 멤버 함수
setprecision(n)
- 출력 스트림 안에서 바로 쓰는 조작자(manipulator)
- #include <iomanip> 필수
+ setprecision(n)이 있는데 이건 #include <iomanip> 헤더가 필요하다. 출력 스트림 안에서 바로 쓰는 조작자(manipulator)이다.
cout.precision(6); // 전체 유효 자릿수 6자리로 설정
cout << fixed << a << endl;
cout << fixed << setprecision(6) << a << endl;
위의 코드에서 보이는 것처럼 setprecision(n)을 사용하면 한줄로 깔끔하게 작성가능하다.

다시 문제로 돌아가보자
#include <iostream>
#include <iomanip>
using namespace std;
int main(){
int a,b; //정수 a,b 입력 받기
cin>>a>>b;
cout<<fixed<<setprecision(6)<<(double)a/b<<endl;
return 0;
}
이렇게 작성했는데 또 틀렸다 뭐가 문제지??
아 출력 결과는 절대오차 또는 상대오차가 10⁻⁹ 이하면 정답으로 처리라는 조건이 있으니
오차를 더 줄이기 위해, 최소 setprecision(9) 이상으로 설정해야함
setprecision(9)로 코드 수정하고 정답 !!

5/200. 10869번 사칙연산
문제
두 자연수 A와 B가 주어진다. 이때, A+B, A-B, A*B, A/B(몫), A%B(나머지)를 출력하는 프로그램을 작성하시오.
입력
두 자연수 A와 B가 주어진다. (1 ≤ A, B ≤ 10,000)
출력
첫째 줄에 A+B, 둘째 줄에 A-B, 셋째 줄에 A*B, 넷째 줄에 A/B, 다섯째 줄에 A%B를 출력한다.
예제 입력 1 복사
7 3
예제 출력 1 복사
10
4
21
2
1
#include<iostream>
using namespace std;
int main()
{
int a,b;
cout<<a+b<<'\n';
cout<<a-b<<'\n';
cout<<a*b<<'\n';
cout<<a/b<<'\n';
cout<<a%b<<endl;
return 0;
}

cin>>a>>b; 로 a,b 값을 입력 받았더니 맞았다.
#include<iostream>
using namespace std;
int main()
{
int a,b;
cin>a>>b;
cout<<a+b<<'\n';
cout<<a-b<<'\n';
cout<<a*b<<'\n';
cout<<a/b<<'\n';
cout<<a%b<<'\n';
return 0;
}

하나 알아두었으면 하는 부분은 사실 다음 줄로 넘어가는 개행 부분의 경우 endl 을 써도 되지만, 나중에 빠른 입출력을 요구하는 경우에는 endl 을 지양하는 것이 좋다.

6/200. 10926번 ??!
준하는 사이트에 회원가입을 하다가 joonas라는 아이디가 이미 존재하는 것을 보고 놀랐다. 준하는 놀람을 ??!로 표현한다. 준하가 가입하려고 하는 사이트에 이미 존재하는 아이디가 주어졌을 때, 놀람을 표현하는 프로그램을 작성하시오.
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str;
cin>>str;
cout<<str<<"??!"<<endl;
return 0;
}

한번에 맞췄다.
cout << str + "??!" << endl; 로도 작성가능
7/200. 18108번 1998년생인 내가 태국에서는 2541년생?!
ICPC Bangkok Regional에 참가하기 위해 수완나품 국제공항에 막 도착한 팀 레드시프트 일행은 눈을 믿을 수 없었다. 공항의 대형 스크린에 올해가 2562년이라고 적혀 있던 것이었다.
불교 국가인 태국은 불멸기원(佛滅紀元), 즉 석가모니가 열반한 해를 기준으로 연도를 세는 불기를 사용한다. 반면, 우리나라는 서기 연도를 사용하고 있다. 불기 연도가 주어질 때 이를 서기 연도로 바꿔 주는 프로그램을 작성하시오.

#include <iostream>
using namespace std;
int main()
{
int year;
cin>>year;
cout<<year+543<<endl;
return 0;
}
틀렸습니다.
아 빼야하는구낭 반대로 생각해버렸군
#include <iostream>
using namespace std;
int main()
{
int year;
cin>>year;
cout<<year-543<<endl;
return 0;
}

8/200. 11382 꼬마 정민
꼬마 정민이는 이제 A + B 정도는 쉽게 계산할 수 있다. 이제 A + B + C를 계산할 차례이다!
입력
첫 번째 줄에 A, B, C (1 ≤ A, B, C ≤ 10의 12승)이 공백을 사이에 두고 주어진다.
#include <iostream>
using namespace std;
int main()
{
int a,b,c;
cin>>a>>b>>c;
cout<<a+b+c<<endl;
return 0;
}
틀렸습니다.
백준 11382번 문제의 범위가 0 ≤ A, B, C ≤ 10¹²라서 int 나 long 자료형은 이 범위를 커버할 수 없기 때문에 **long long**을 사용해야 한다고 한다. long long은 -10¹⁸ ~ 10¹⁸ 범위의 값을 지원하기 때문에 충분히 큰 숫자를 다룰 수 있음
↑
#include <iostream>
using namespace std;
int main()
{
long long a,b,c;
cin>>a>>b>>c;
cout<<a+b+c<<endl;
return 0;
}

9/200. 10171 고양이
고양이를 출력한다.
예제 출력 1
\ /\
) ( ')
( / )
\(__)|
일단 cout과 공백으로 구현가능할거같다는 생각이 들었다.
c++에서 공백 출력을 어떻게 하는지 구글링해보니 setw가 있다고 한다.
참고 https://rh-cp.tistory.com/3
(C++) \t, 공백 언제까지 다 치고있을건가요? (setw)
picture from Shutterstock 출력문자들을 정렬하기 위해 공백이나 "\t"를 사용합니다. 하지만 이 작업들은 적지않은 시간을 소요합니다. 이것을 편하게 해주는 명령어로 setw가 있습니다. setw는 cout과 함
rh-cp.tistory.com
예시 코드를 토대로 한번 해보자
#include <iostream>;
#include <iomanip>;
using namespace std;
int main()
{
cout<<"\""<<setw(4)<<"/\""<<'\n';
cout<<setw(1)<<")"<<setw(3)<<"("<<setw(2)<<"')"<<'\n';
cout<<"("<<setw(3)<<"/"<<setw(3)<<")"<<'\n';
cout<<setw(1)<<"\(__)|"<<'\n';
return 0;
}
굉장히 짜치긴 하지만 일단 해봤음
틀렸습니다
^^ 그럼 그렇지
이 문제의 핵심은 역슬래시이다 \는 이스케이프 문자이기 때문에 \\으로 출력해야함
참고로 "는 \"로 출력가능
#include <iostream>;
using namespace std;
int main()
{
cout<<"\\ /\\\n";
cout<<" ) ( ')\n";
cout<<"( / )\n";
cout<<" \\(__)|\n";
return 0;
}
이렇게 수정했다.
setw()를 사용해도 틀리는 건 아니지만, 이 문제에서는 setw()를 사용하지 않고 문자를 정확히 출력하는 것이 정확한 답이다.

10/200. 10172 개
아래 예제와 같이 개를 출력하시오.
|\_/|
|q p| /}
( 0 )"""\
|"^"` |
||_/=\\__|
#include <iostream>
using namespace std;
int main()
{
cout<<"|\\_/|"<<'\n';
cout<<"|q p| /}"<<'\n';
cout<<"( 0 )\"\"\"\\"<<'\n';
cout<<"|\"^\"` |"<<'\n';
cout<<"||_/=\\\\__|"<<'\n';
return 0;
}
큰 따옴표와 백슬래시 유의, 고양이 문제 참고해서 풀었음

한번에 맞음
'백준 200제' 카테고리의 다른 글
백준 c++로 문제 풀기(21~30) (0) | 2025.05.06 |
---|---|
백준 c++로 문제 풀기 (11~20) (0) | 2025.05.03 |