※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 26748번 문제인 Antypalindrom이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/26748
26748번: Antypalindrom
Wyjaśnienie do przykładu: Antypalindromy jakie można uzyskać to: m (na 2 sposoby), c (na 2 sposoby), o (na 4 sposoby), w, mo, moc, om, com, wo, ow, oc (na 2 sposoby), co (na 2 sposoby), cow, woc.
www.acmicpc.net
어떤 문자열이 팰린드롬인 경우, 그 길이가 짝수라면 가운데의 두 문자가 무조건 같고 홀수라면 가운데의 세 문자가 팰린드롬을 이룬다는 성질을 이용하자.
즉, 같은 문자가 연이어 나오거나 사이에 하나의 문자를 끼고 나오는 부분을 포함하지 않는 부분문자열의 개수를 세는 것으로 문제를 해결할 수 있다.
아래는 제출한 소스코드이다.
#include <iostream>
using namespace std;
typedef long long ll;
ll slen;
string s;
ll ans;
ll L = 0, R = 0;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> s;
s += s.back();
slen = s.length();
ans += (slen - 1);
while (R < slen) {
if (R == L) {
R++;
continue;
}
if (s[R] == s[R - 1]) {
ll x = R - L;
ans += x * (x - 1) / 2;
L = R;
continue;
}
if (L + 1 == R) {
R++;
continue;
}
if (s[R] == s[R - 2]) {
ll x = R - L;
ans += x * (x - 1) / 2;
L = R - 1;
continue;
}
else R++;
}
cout << ans;
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 26937 // C++] Köpa Böcker (0) | 2023.07.28 |
---|---|
[BOJ 26763 // C++] Liczby silne (0) | 2023.07.27 |
[BOJ 2295 // C++] 세 수의 합 (0) | 2023.07.25 |
[BOJ 17265 // C++] 나의 인생에는 수학과 함께 (0) | 2023.07.24 |
[BOJ 26740 // C++] Nawiasowania (0) | 2023.07.23 |