본문 바로가기
알고리즘/SWEA

SWEA D3 20019. 회문의 회문 (python)

by 개발하는 호랑이 2024. 3. 1.

회문의 회문

풀이

문제는 일단 회문이다.
그런데 회문 안에서 또 회문이 있어야한다.

문제에서 적힌 것을 그대로 실행해주면된다.

  • S는 회문이다.
  • S의 처음 (N-1)/2글자가 회문이다.
  • S의 마지막 (N-1)/2글자가 회문이다.

이 조건을 만족시켜주면 되고, python에서는 아주 간단하게 코드를 구성해서 만들 수 있다.

def solution(S):
    # 회문일 때 시작
    N = len(S)
    if S == S[::-1]:
        if S[:N//2] == S[:N//2][::-1] and S[N//2+1:] == S[N//2+1:][::-1]:
            return 'YES'
    else:
        return 'NO'
    return 'NO'

T = int(input())
for testcase in range(1, T+1):
    S = input()
    answer = solution(S)
    print(f'#{testcase} {answer}')

C++

궁금해서 GPT를 이용해서(C++할 줄 모름) 회문의 회문문제를 C++로 코드를 짜봤더니 아래처럼 되었다.
C++은 볼 때마다 신기하다. 몰라서 그런가.

#include <iostream>
#include <algorithm>
#include <string>

using namespace std;

string solution(string S) {
    string r = S;
    reverse(r.begin(), r.end());

    // 회문일 때 시작
    if (S == r) {
        string left = S.substr(0, S.size() / 2);
        string right = S.substr(S.size() / 2 + 1);

        string r_left = left;
        reverse(r_left.begin(), r_left.end());

        string r_right = right;
        reverse(r_right.begin(), r_right.end());

        if (left == r_left && right == r_right)
            return "YES";
    }
    return "NO";
}

int main() {
    int T;
    cin >> T;

    for (int testcase = 1; testcase <= T; ++testcase) {
        string S;
        cin >> S;
        string answer = solution(S);
        cout << "#" << testcase << " " << answer << endl;
    }
    return 0;
}