[백준] 10171번 : 고양이 - [C++]
10171번: 고양이
아래 예제와 같이 고양이를 출력하시오.
www.acmicpc.net
-
문제
- 알고리즘 [접근 방법]
이 번 문제는 위 출력대로 풀이하면 되긴 하지만 주의해야 할 점이 있다.
여러분이 출력할 때 cout 경우 endl을 썼을 수도 있지만, \n, \t 같이 일명 이스케이프 시퀀스(Escape Sequence)를 쓴 적이 있었을 것이다. 흔히 백슬래시(\) 뒤에 문자를 조합함으로써 특정 기능을 수행하는 문자라고 보면 된다.
즉, \ + '문자' 를 통해 특정 기능을 수행하도록 하는 것이다.
예로들어 다음과 같은 이스케이프 시퀀스들이 있다.
\n : 줄바꿈
\t : 탭(키보드의 tap과 같은기능)
\b : 백스페이스
등등...
한마디로 일종의 매크로와 비슷한 개념인데, 아무래도 백슬래시와 문자를 조합하여 표현하다보니 문제가 생긴다. 바로 백슬래시를 출력하고 싶을 때다.
백슬래시(\) 자체가 어떤 문자를 뒤에 붙여 특정 기능을 수행하도록 하다보니 백슬래시만 쳐서 출력하려고 하면, 컴파일러에서는 이스케이프 시퀀스를 만족하지 못하는 불안정한 상태로 인지하여 에러를 띄운다.
#include <stdio.h>
int main(int argc, char const *argv[]) {
printf("\"); // 컴파일하면 에러가 난다.
return 0;
}
그렇기 때문에 이 백슬래시 문자 자체도 출력하기 위해 \ 와 조합하여 써야한다.
즉, \(백슬래시) + \(백슬래시) 로 백슬래시 '하나'를 출력 할 수 있다.
#include <stdio.h>
int main(int argc, char const *argv[]) {
printf("\\"); // 백슬래시 한 개 출력
return 0;
}
그 외에도 " " 같이 문자열을 의미하도록 묶어주는 큰 따옴표 같은 문자들도 큰따옴표 자체를 출력하기 위해서 백슬래시와 조합하여 출력할 수 있다.
/ + "
#include <stdio.h>
int main(int argc, char const *argv[]) {
printf("\""); // 큰따옴표 한 개 출력
return 0;
}
이런식으로 일반적으로 특정 기능을 요하는 문자들을 출력하고싶다면 대부분 백슬래시(\) + 출력하려는 문자를 조합하면 된다.
이 점을 유의하고 쓰면 이렇다.
[원래 문자]
\ /\
) ( ')
( / )
\(__)|
위에서 백슬래시(\) 부분이 출력될 수 있도록 \ 에 \ 를 하나 더 붙여준다.
\\ /\\
) ( ')
( / )
\\(__)|
그리고, 각 줄 별로 개행(줄바꿈)을 해주어야 하니 마지막에 \n을 붙여주면 끝이다.
\\ /\\\n
) ( ')\n
( / )\n
\\(__)|\n
위 문자열을 '한 줄씩' 출력하면 된다.
- 2가지 방법을 사용하여 풀이한다.
stdio 를 쓰는 출력방법과 iostream을 쓰는 방법 두 가지를 보여주고자 한다.
1 . stdio
2. iostream
- 풀이
- 방법 1 : [stdio]
#include <stdio.h> // 또는 <cstdio>
int main(int argc, char const *argv[]) {
printf("\\ /\\\n");
printf(" ) ( ')\n");
printf("( / )\n");
printf(" \\(__)|\n");
return 0;
}
이스케이프 시퀀스(이스케이프 문자)만 유의하여 제출하면 되기 때문에 크게 어려울 건 없을 것이다.
필자의 경우 stdio를 쓰는게 익숙해서 이 방법이 편하긴 하지만 입출력은 여러분이 편한 방식으로 해주면 된다.
- 방법 2 : [iostream]
C언어의 기본 입출력 헤더인 stdio 대신 C++에서 지원하는 iostream을 이용한 방식이다.
#include <iostream>
using namespace std;
int main(int argc, char const *argv[]) {
cout << "\\ /\\\n";
cout << " ) ( ')\n";
cout << "( / )\n";
cout << " \\(__)|\n";
return 0;
}
- 성능
채점 번호 : 26078172 - 방법 2 : iostream
채점 번호 : 26078172 - 방법 1 : stdio
- 정리
이 번 문제 또한 어려운 점은 없었을 것이다.
다만 이스케이프 시퀀스에 대해 인지하고 있는가를 물어보는 문제인만큼 가끔 이를 생각 안하고 그냥 제출했다가 틀릴 수도 있으니.. 이 점 조심하시길 바란다.
'C++ - 백준 [BAEK JOON] > 입출력과 사칙연산' 카테고리의 다른 글
[백준] 10998번 : A×B - [C++] (0) | 2021.02.13 |
---|---|
[백준] 1001번 : A-B - [C++] (0) | 2021.02.10 |
[백준] 1000번 : A+B - [C++] (0) | 2021.02.08 |
[백준] 10172번 : 개 - [C++] (0) | 2021.02.06 |
[백준] 2557번 : Hello World - [C++] (0) | 2021.02.02 |