본문 바로가기
Develop/백준 (Cpp)

[백준] 1254번 : 팰린드롬 만들기 (C++)

by Tarra 2023. 9. 6.

1254번 : 팰린드롬 만들기


문제)

동호와 규완이는 212호에서 문자열에 대해 공부하고 있다. 규완이는 팰린드롬을 엄청나게 좋아한다. 팰린드롬이란 앞에서부터 읽으나 뒤에서부터 읽으나 같게 읽히는 문자열을 말한다.

동호는 규완이를 위한 깜짝 선물을 준비했다. 동호는 규완이가 적어놓고 간 문자열 S에 0개 이상의 문자를 문자열 뒤에 추가해서 팰린드롬을 만들려고 한다. 동호는 가능하면 가장 짧은 문자열을 만들려고 한다.

동호가 만들 수 있는 가장 짧은 팰린드롬의 길이를 출력하는 프로그램을 작성하시오.

 

 

 

입력 :

첫째 줄에 문자열 S가 주어진다. S는 알파벳 소문자로만 이루어져 있고, 길이는 최대 50이다.

 

 

 

출력 :

첫째 줄에 동호가 만들 수 있는 가장 짧은 팰린드롬의 길이를 출력한다.

 

 

 

 

 

풀이)

 

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
// 1254. 펠린드롬 만들기
#include <iostream>
#include <string>
#include <algorithm>
 
using namespace std;
 
// 펠린드롬인지 확인하는 함수
bool check(string re)
{
    string origin = re;
    reverse(re.begin(), re.end());
 
    return origin == re;
}
 
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
 
    // reverse 할 것이므로 re라는 이름으로 받는다.
    string re;
    cin >> re;
 
    // re를 복사하여 origin에 저장
    string origin = re;
    // reverse를 이용하여 원래의 re는 뒤집는다.
    reverse(re.begin(), re.end());
 
 
    // 0번째 글자까지 체크
    int idx = 0;
    while (idx < origin.length())
    {
        // 원본을 저장해 놓고
        string temp = origin;
        // 뒤집은 글자를 temp에 더해준다.
 
        // qwerty의 경우
        // 1회차 -> qwerty
        // 2회차 -> qwertyq
        // 3회차 -> qwertywq
        // 4회차 -> qwertyewq 와 같이 만들어주는 것
        for (int i = re.length() - idx; i < re.length(); i++)
        {
            temp += re[i];
        }
 
        // 만들어진 단어가 펠린드롬인지 체크한다.
        if (check(temp))
        {
            cout << temp.length();
            break;
        }
        idx++;
    }
 
    return 0;
}
 
// abab
// baba
cs

출처 : https://www.acmicpc.net/problem/1254 

 

1254번: 팰린드롬 만들기

동호와 규완이는 212호에서 문자열에 대해 공부하고 있다. 규완이는 팰린드롬을 엄청나게 좋아한다. 팰린드롬이란 앞에서부터 읽으나 뒤에서부터 읽으나 같게 읽히는 문자열을 말한다. 동호는

www.acmicpc.net