본문 바로가기

Algorithm/Brute Force

(C++) - 백준(BOJ) 8892 : 팰린드롬

반응형

https://www.acmicpc.net/problem/8892

 

8892번: 팰린드롬

팰린드롬은 어느 방향으로 읽어도 항상 같은 방법으로 읽을 수 있는 단어이다. 예를 들어, civic, radar, rotor, madam은 팰린드롬이다. 상근이는 단어 k개 적혀있는 공책을 발견했다. 공책의 단어는 ICPC

www.acmicpc.net

모든 경우의 수를 탐색하는 brute force문제였습니다.

📕 풀이방법

📔 입력 및 초기화

test case t, 단어의 개수 k, 단어들을 저장할 vector words를 선언한 후 적절히 입력받습니다.

📔 풀이과정

words의 모든 두 단어를 확인해 합쳐본 뒤 팰린드롬인지 확인해줍니다.

1. 두 단어는 각각 words[i] + words[j] 또는 words[j] + words[i]식으로 두 가지의 합치는 방법이 있습니다. 

2. 합쳤을 때 팰린드롬이라면 해당 단어를 ans에 저장해줍니다.

📔 정답출력

ans를 출력해줍니다.


📕 Code

#include <bits/stdc++.h>
using namespace std;
int t, k;
string ans;
vector <string> words;

bool isPalindrome(string mergedWord){
    int sz = mergedWord.size();
    for(int i = 0; i < sz / 2; i++)
        if(mergedWord[i] != mergedWord[sz - i - 1]) 
            return false;
    return true;
}

int main(){
    cin >> t;
    while(t--){
        cin >> k;
        ans = "0";
        words.resize(k);
        for(int i = 0; i < k; i++) cin >> words[i];

        for(int i = 0; i < k; i++){
            for(int j = i+1; j < k; j++){
                string mergedWord = words[i] + words[j];
                string mergedWord2 = words[j] + words[i];
                if(isPalindrome(mergedWord)) ans = mergedWord;
                if(isPalindrome(mergedWord2)) ans = mergedWord2;
            }
        }
        cout << ans << '\n';
    }
}