[백준 27627] Splitology (C#, C++) - soo:bak
작성일 :
문제 링크
설명
문자열을 두 개의 비어 있지 않은 부분으로 나눴을 때 둘 다 팰린드롬이면 해당 분할을 출력하는 문제입니다.
접근법
모든 분할 지점을 확인하며 앞부분과 뒷부분이 각각 팰린드롬인지 검사합니다.
하나라도 찾으면 그 두 문자열을 출력하고, 끝까지 없으면 NO를 출력합니다.
Code
C#
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
using System;
class Program {
static bool IsPal(string s, int l, int r) {
while (l < r) {
if (s[l] != s[r]) return false;
l++;
r--;
}
return true;
}
static void Main() {
var s = Console.ReadLine()!;
var n = s.Length;
for (var i = 1; i < n; i++) {
if (IsPal(s, 0, i - 1) && IsPal(s, i, n - 1)) {
Console.WriteLine($"{s.Substring(0, i)} {s.Substring(i)}");
return;
}
}
Console.WriteLine("NO");
}
}
C++
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
#include <bits/stdc++.h>
using namespace std;
bool isPal(const string& s, int l, int r) {
while (l < r) {
if (s[l] != s[r]) return false;
l++;
r--;
}
return true;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
string s; cin >> s;
int n = s.size();
for (int i = 1; i < n; i++) {
if (isPal(s, 0, i - 1) && isPal(s, i, n - 1)) {
cout << s.substr(0, i) << " " << s.substr(i) << "\n";
return 0;
}
}
cout << "NO\n";
return 0;
}