Notice
Recent Posts
Link
정화 코딩
[C++] 팰린드롬 (백준 10174번) 본문
https://www.acmicpc.net/problem/10174
#include <iostream>
using namespace std;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int tn;
cin >> tn;
while (tn--) {
string s;
getline(cin, s);
int n = s.length();
for (int i = 0; i < n; i++) {
if (s[i] >= 'A' && s[i] <= 'Z') s[i] -= ('A' - 'a');
}
bool isp = true;
for (int i = 0; i < n / 2; i++) {
if (s[i] != s[n - i - 1]) isp = false;
}
if (isp) cout << "Yes\n";
else cout << "No\n";
}
}
공백이 들어올 수 있기 때문에 string으로 받는 것이 아니라 한 줄 전체를 받아야 한다.
C++ 한 줄 입력받기: getline(cin, s);
근데 위의 코드를 돌리면 반복문이 n-1번만 도는 것처럼 보인다. 그 이유는 cin >> tn으로 정수를 입력받은 후에 '\n'이 그대로 버퍼에 남아 getline으로 들어가기 때문이다.
#include <iostream>
using namespace std;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int tn;
cin >> tn;
cin.ignore(); // 남아있는 개행 문자를 제거
while (tn--) {
string s;
getline(cin, s);
int n = s.length();
for (int i = 0; i < n; i++) {
if (s[i] >= 'A' && s[i] <= 'Z') s[i] -= ('A' - 'a');
}
bool isp = true;
for (int i = 0; i < n / 2; i++) {
if (s[i] != s[n - i - 1]) isp = false;
}
if (isp) cout << "Yes\n";
else cout << "No\n";
}
}
이렇게 수를 입력받은 후에 버퍼를 비워 주는 코드를 추가하니 정상적으로 돌아간다! (AC)
'PS' 카테고리의 다른 글
[C++] A → B (백준 16953번) (0) | 2024.11.27 |
---|---|
[C++] 벽 부수고 이동하기 (0) | 2024.11.26 |
[C++] 내려가기 (백준 2096번) (0) | 2024.11.25 |
[C++] 알파벳 (백준 1987번) (0) | 2024.11.24 |
[C++] 별 찍기 - 11 (백준 2448번) (0) | 2024.11.23 |
Comments