정화 코딩

[C++] 팰린드롬 (백준 10174번) 본문

PS

[C++] 팰린드롬 (백준 10174번)

jungh150c 2024. 12. 13. 15:31

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