※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 1254번 문제인 팰린드롬 만들기이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/1254
1254번: 팰린드롬 만들기
동호와 규완이는 212호에서 문자열에 대해 공부하고 있다. 규완이는 팰린드롬을 엄청나게 좋아한다. 팰린드롬이란 앞에서부터 읽으나 뒤에서부터 읽으나 같게 읽히는 문자열을 말한다. 동호는
www.acmicpc.net
임의의 회문 문자열에 대하여, 그 문자열의 맨 앞글자와 뒷글자를 하나씩 제거해도 그 문자열은 다시 회문이 된다는 점을 관찰하자.
위의 성질을 이용하면, 주어진 문자열의 가장 긴 회문 접미사를 찾아, 해당 접미사를 중심으로 하는 회문을 새로 만들면 규완이가 원하는 문자열을 얻을 수 있다. 이렇게 만든 새 문자열의 길이는 원래의 문자열에서 회문 접미사의 길이를 뺀 만큼 길어진 값이 된다.
아래는 제출한 소스코드이다.
#include <iostream>
#include <string>
using namespace std;
string s;
bool isPal(int L, int R) {
while (L < R) {
if (s[L] != s[R]) return 0;
L++, R--;
}
return 1;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> s;
int slen = s.length();
for (int i = 0; i < slen; i++) {
if (isPal(i, slen - 1)) {
cout << slen + i;
return 0;
}
}
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 5958 // C++] Space Exploration (0) | 2022.07.31 |
---|---|
[BOJ 2304 // C++] 창고 다각형 (0) | 2022.07.31 |
[BOJ 5163 // C++] Isn’t It Funny How a Bear Likes Honey? (0) | 2022.07.31 |
[BOJ 5959 // C++] Crop Circles (0) | 2022.07.31 |
[BOJ 1658 // C++] 돼지 잡기 (0) | 2022.07.30 |