지난 글에서 cout을 통한 문자열을 출력하는 법을 알아보았지만, 이것만으로는 대부분의 문제를 해결할 수 없습니다.
보다 많은 문제들을 해결하기 위해서, 출력문에 대해서 깊게 짚어보고 가도록 하겠습니다.
cout의 기본 구조
cout << "출력할 문자열";
cout의 기본 구조는 위와 같습니다.
문자열은 문자가 나열된 것이라고 생각해주시면 됩니다.
어떤 출력할 문자열을 << 화살표를 통해 화면으로 출력해 낸다 라고 이해해주시면 깔끔합니다.
여기서 "출력할 내용"이 무엇이냐에 따라 다양한 변형이 가능합니다.
숫자 출력하기
지금까지의 지식을 바탕으로 998244353이란 숫자를 출력하려면
#include <iostream>
using namespace std;
int main(){
cout << "998244353";
return 0;
}
다음과 같은 코드를 작성해야 합니다.
그런데, "" 라는 것은 이 안에 있는 내용을 문자열으로 보겠다는 의미의 구문이라서, "998244353"을 출력하는것은 숫자 998244353이 아니라,
문자열 "998244353"을 출력하는 것입니다.
이렇게 한개의 숫자만 다루고 있는 경우에는 출력에 아무런 차이가 없겠지만, 숫자 5+3 을 출력하는것과 문자열 "5+3"을 출력하는 것에는 큰 차이가 있습니다.
전자는 컴퓨터가 계산한 후 8
이 출력되고,
후자는 5+3
이 출력됩니다.
이를 해결하고 숫자를 그대로 출력하기 위해서는, 문자열으로 보겠다는 의미의 ""을 제거하고,
#include <iostream>
using namespace std;
int main(){
cout << 5+3; // 결과:8
return 0;
}
이렇게 작성해주시면 됩니다.
// 결과:8
이라고 적어둔 부분은 주석으로, C++에서는 해당 부분을 읽지 않습니다. 대부분의 프로그램에서 주석을 회색으로 표기하니 색을 통해 구분하실 수 있습니다.
문자 출력하기
문자열 출력하기가 아니라 문자 출력하기임에 신경써주셔야 합니다.
문자열을 ""
으로 감싸서 표기하는 것처럼,
문자 한 글자는 ''
으로 감싸서 표기할 수 있습니다.
물론 문자가 한개뿐인 문자열도 존재하기에, "A" 등을 사용하실 수도 있습니다.
#include <iostream>
using namespace std;
int main(){
cout << "A"; // 결과:A
cout << 'A'; // 결과:A
return 0;
}
이 둘의 차이에 대해서는 한번 쭈욱 정리한 후에 보다 심화적인 글에서 다룰 예정입니다. 지금은 같은 역할을 한다 정도로 이해해주세요.
특수기호 출력하기
일반적인 특수기호들은 문자열임을 나타내는 기호 ""를 통해
#include <iostream>
using namespace std;
int main(){
cout << "!@#$^&*()";
return 0;
}
로 출력할 수 있습니다.
그런데, "
그 자체를 출력하기 위해서는 어떻게 해야 할까요?
#include <iostream>
using namespace std;
int main(){
cout << """;
return 0;
}
그냥 이렇게 작성하면 될까요?
이렇게 작성하면 C++은 해당 줄을 제대로 읽지 못했다고 오류를 출력할 것입니다.
"""
이라는 부분에서 앞의 두 글자 ""
를 하나의 문자열으로 보고,
그 뒤에 뜬금없이 "
가 있기 때문에 오류가 출력되는 것입니다.
이렇듯, 문자열이나 문자임을 알리는 역할을 가지는 문자
"
'
\
%
등은 제대로 출력되지 않는 문제가 있습니다.
이를 해결하기 위해서, C언어에서는 역슬래시 \
라는 기호를 사용합니다.
역슬래시 뒤에 오는 것들은 일반 문자로 보겠다는 의미가 있습니다.
역슬래시를 사용하여 해당 특수문자들을 출력해 보면
#include <iostream>
using namespace std;
int main(){
cout << "\""; // 결과:"
cout << "\'"; // 결과:'
cout << "\\"; // 결과:\
cout << "%%"; // 결과:%
return 0;
}
다음과 같이 출력할 수 있으며, 이때 %는 형식 지정자 라는 다른 분류에 속하기 때문에 %%
로 출력함에 유의하셔야 합니다.
형식 지정자는 C언어에 남아있는 개념으로, C++에서는 불필요하기에 설명에 지면을 할애하지는 않겠습니다.
이 부분은 영어로 비유하자면 문법이기 때문에 외울 생각을 하시는것이 깔끔합니다.
이스케이프 시퀀스와 줄내림
모든걸 출력할 수 있게 된것 같지만, 아직 엔터
가 남았습니다
엔터는 문자 그대로 줄내림을 담당하는데, 키보드에서도 enter이라고 적지
엔터에 대응하는 "글자" 는 존재하지 않습니다.
앞서 역슬래시 \
기호를 사용하여 특수문자를 표기한다고 하였는데,
엔터 등의 일반적으로 표현할 수 없는 글자도 특수문자의 일종으로 보고,
이들을 이스케이프 시퀀스라고 합니다
\n
줄내림, 엔터를 담당함\0
Nul 문자, 문자열의 끝을 의미.
수많은 이스케이프 시퀀스가 있지만, 알고리즘 문제해결시에 필요한것은 이 둘입니다.
복합 출력
이제 숫자, 문자, 문자열을 각각 출력할 수 있게 되었는데,
이들을 섞어서 한번에 출력할 수도 있습니다.
예를 들어서 숫자 출력 후 줄내림을 하고 싶다면,
#include <iostream>
using namespace std;
int main(){
cout << 998244353;
cout << "\n";
return 0;
}
으로 출력하실 수 있습니다.
하지만 지난 시간의 뇌피셜 대원칙에 의하면 최대한 축약하는 것이 좋고,
#include <iostream>
using namespace std;
int main(){
cout << 998244353 << "\n";
return 0;
}
cout을 통해 문자열이 나가는것은 똑같으니
왼쪽부터 차례대로 나가도록 다음과 같이 적는것도 가능합니다.
결론
이제 특수문자와 줄내림도 출력할 수 있게 되었으므로,
브론즈V 난이도에서 입력을 요구하지 않는 문제들을 해결하실 수 있습니다.
고양이를 출력하는데 역슬래시 \
가 포함되어있습니다. 적절한 규칙에 맞게 출력해주시면 됩니다.
지금까지의 배운것을 활용하시면
문제 > 새싹 > 출력
에서의 여섯문제를 모두 해결하실수 있습니다.
- boj 10718 We love kriii
- boj 5338 마이크로소프트 로고
등의 문제들도 추천드립니다.