Problem Solving/백준 1일 1커밋

백준 8892 팰린드롬 - C++

HWAN JJ 2022. 1. 16. 22:18

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

 

8892번: 팰린드롬

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

www.acmicpc.net

<문제>

 

팰린드롬은 어느 방향으로 읽어도 항상 같은 방법으로 읽을 수 있는 단어이다. 예를 들어, civic, radar, rotor, madam은 팰린드롬이다.

상근이는 단어 k개 적혀있는 공책을 발견했다. 공책의 단어는 ICPC 문제가 저장되어 있는 서버에 접속할 수 있는 비밀번호에 대한 힌트이다. 비밀번호는 k개의 단어 중에서 두 단어를 합쳐야 되고, 팰린드롬이어야 한다. 예를 들어, 단어가 aaba, ba, ababa, bbaa, baaba일 때, ababa와 ba를 합치면 팰린드롬 abababa를 찾을 수 있다.

단어 k개 주어졌을 때, 팰린드롬을 찾는 프로그램을 작성하시오.

 

<입력>

 

첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스의 첫째 줄에는 공책에 적혀져있는 단어의 수 k(1 ≤ k ≤ 100)가 주어진다. 다음 k개 줄에는 a부터 z까지 알파벳으로 이루어진 단어가 한 줄에 하나씩 주어진다. 모든 단어 길이의 합은 10,000보다 작거나 같다.

 

<출력>

 

각 테스트 케이스마다 팰린드롬을 출력한다. 만약, 가능한 팰린드롬이 여러 가지라면 아무거나 출력한다. 팰린드롬을 만들 수 없는 경우에는 0을 출력한다.

 

<Tip>

 

문자열 A, B에 대해서 A+B를 검사했으면 당연히 B+A도 확인하자.

모든 단어의 길이의 합이 최대 10,000이기 때문에 제한시간 1초내에도 n^2 알고리즘을 적용할 수 있다.

Brute Force 접근 방식 역시 가능하다.

 

#define _CRT_SECURE_NO_WARNINGS

#include <cstdio>
#include <vector>
#include <string>
#include <iostream>
#include <algorithm>
#include <memory.h>

using namespace std;

int t, n;

void solve(vector<string> v) {

	int len, i, j, k;
	string tmp, tmp2;

	for (i = 0; i < n-1; i++) {
		for (j = i + 1; j < n; j++) {
			// v[i] 와 v[j]를 비교
			tmp = v[i]; tmp2 = v[j];
			tmp += v[j]; tmp2 += v[i];
			len = tmp.size();

			for (k = 0; k < len / 2; k++) {
				if (tmp[k] != tmp[len - 1 - k]) {
					break;
				}
			}
			if (k == len / 2) {
				cout <<tmp <<"\n";
				return;
			}

			for (k = 0; k < len / 2; k++) {
				if (tmp2[k] != tmp2[len - 1 - k]) {
					break;
				}
			}
			if (k == len / 2) {
				cout << tmp2 <<"\n";
				return;
			}

		}
	}
	printf("0\n");
}

int main(void) {

	scanf("%d", &t);

	for (int i = 0; i < t; i++) {
		vector<string> v;
		scanf("%d", &n);
		getchar();
		for (int j = 0; j < n; j++) {
			string s;
			getline(cin, s);
			//getchar();
			v.push_back(s);
		}
		solve(v);
	}

	return 0;
}

'Problem Solving > 백준 1일 1커밋' 카테고리의 다른 글

백준 2866 문자열 잘라내기  (0) 2022.01.18
백준 5525 IOIOI - C++  (0) 2022.01.16
백준 11091 알파벳 전부 쓰기 - C++  (0) 2022.01.16
백준 16916 부분 문자열  (0) 2022.01.15
백준 2293 동전1  (0) 2022.01.12