※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 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

+ Recent posts