문제
팰린드롬은 앞으로 읽으나 뒤로 읽으나 똑같은 단어나 숫자들을 말한다. 일반적으로 대소문자를 구분하지 않지만, 공백은 구분한다.
다음은 팰린드롬의 예시이다.
- Anna
- Harrah
- Arora
- Nat tan
- 9998999
- 123 321
- $$$&&$$$
모든 라인에 대해 팰린드롬인지 아닌지를 구분하는 프로그램을 작성하시오.
입력
첫째 줄에 테스트 케이스의 개수 n이 주어진다.
각 테스트 케이스는 한 줄의 텍스트로 이루어져있으며, 비어있는 줄은 없다.
출력
각 테스트 케이스에 대해 정답을 출력한다.
팰린드롬일 경우 "Yes"를 출력하고, 그렇지 않을 경우 "No"를 출력한다.
예제 입력 1
6 Nat tan Palindrome 123454321 Dogs and Cats **()()** 1 221 |
예제 출력 1
Yes No Yes No No No |
출처
High School > PLU High School Programming Contest > PLU 2014 - Novice 5번
· 문제를 번역한 사람: minjunkweon
코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | #include <iostream> #include <string> #include <cctype> // tolower() using namespace std; int main() { int n; cin >> n; cin.ignore(); // Removing '\n' in a Buffer. for(int i = 0; i < n; i++) { string ary; int isSame = 1; getline(cin, ary); // instead of 'gets()' in C. (It is impossible to use 'gets()' in C++.) for(int i = 0; i < ary.length() / 2; i++) { if (tolower(ary[i]) != tolower(ary[ary.length() - 1 - i])) { isSame = 0; break; } } if (isSame != 1) cout << "No" << endl; else cout << "Yes" << endl; } return 0; } |
cin을 이용하여 테스트 케이스의 갯수를 입력 받으면 화이트 스페이스('\n')가 입력 버퍼에 남게 된다.
그래서 이 화이트 스페이스를 입력 버퍼에서 제거하기 위해서 cin.ignore() 함수를 사용하였다.
텍스트에 공백이 포함될 수 있으므로, 공백을 포함한 문자열을 입력받는 getline() 함수를 사용하였다. (C에서는 gets() 함수를 사용한다. C++에서는 이 함수를 지원하지 않는다. cin을 이용하여 텍스트를 입력받을 경우 띄어쓰기가 포함된 텍스트를 입력받을 수 없다.)
tolower() 함수를 사용하여 입력받은 문자열에 포함된 대문자의 알파벳을 모두 소문자로 변경하도록 하였다. (이 함수를 사용하려면 cctype 헤더를 include 해야 한다.)
이번 문제를 풀면서 문자열 입력에 관한 여러가지 정보를 얻을 수 있었다.
'Problem Solving > BaekJoon Online Judge' 카테고리의 다른 글
[BOJ7567][C++] 그릇 (0) | 2018.09.29 |
---|---|
[BOJ7568][C++] 덩치 (0) | 2018.09.29 |
[BOJ1978][C++] 소수 찾기 (0) | 2018.09.15 |
[BOJ12400][C++] Google語스 (0) | 2018.09.08 |
[BOJ14490][C++] 백대열 (0) | 2018.08.25 |
[BOJ14495][C++] 피보나치 비스무리한 수열 (0) | 2018.08.24 |
[BOJ15552][C++] 빠른 A+B (1) | 2018.08.18 |
[BOJ15953][C++] 상금 헌터 (0) | 2018.08.15 |