컴굥일지

[BOJ/백준 8892][C++] 팰린드롬 본문

알고리즘/코테 문제

[BOJ/백준 8892][C++] 팰린드롬

gyong 2022. 1. 21. 23:51
반응형

문제

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

 

문제 내용

입력받은 문자열들 중 2개를 골라 연결했을 때, 팰린드롬인지 아닌지 확인하는 내용이다.
가능한 팰린드롬들 중에 1가지만 출력하면 되며, 만들 수 없을 경우 0을 출력하면 된다.

 

문제 풀이

1. check_palindrome(string str) 함수

매개 인자로 전달받은 문자열이 팰린드롬인지 아닌지를 확인하는 함수이다.
문자열의 양 끝에서부터 가운데로 진행하며, 대칭인지 아닌지를 확인하면 된다.


2. solution() 함수

함수 안에서 먼저 주어지는 단어의 개수와, 단어들을 입력받는다. 

이중 for문을 돌며, 단어 두 개를 골라 결합하여 check_palindrome()에 넘긴다.

반환된 값이 false이면 새로 단어를 골라 확인하는 과정을 거친다.
true가 한 번도 나오지 않은 채로 반복문이 끝나면 0을 출력한다.


반환된 값이 true라면 문자열을 출력하고 해당 테스트 케이스에 대한 반복문을 종료하면 된다.
(이 과정에서 return을 쓰기 위해 main() 함수 안에서 문제를 해결하지 않고, solution() 함수를 새로 만들었다.)

 

코드

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

//팰린드롬인지 체크하는 함수
bool check_palindrome(string str) { 
	int len = str.length();
	for (int i = 0; i < len / 2; i++) {
		if (str[i] == str[len - i - 1]) continue;
		else return false;
	}
	return true;
}

//각 테스트케이스를 확인하는 solution 함수
void solution() {
	
    //입력
	int word;
	cin >> word;
	vector<string>v;
	string tmp;

	for (int j = 0; j < word; j++) {
		cin >> tmp;
		v.push_back(tmp);
	}
	
    //문제해결
	for (int j = 0; j < word; j++) {
		for (int k = 0; k < word; k++) {
			if (j == k) continue;

			if (check_palindrome(v[j] + v[k])) {
				cout << v[j] + v[k] << '\n';
				return ; 
			}
		}
	}

	cout << 0 << '\n';
}

int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);

	int test;
	cin >> test;

	for (int i = 0; i < test; i++) {
		solution();
	}
}

 

문제 코드 설명

1) 입력

처음에 테스트 케이스의 개수를 입력받고, for문 안에서 solution() 함수를 반복해서 실행하면 된다.

반응형
Comments