홍시홍의 프로그래밍

[백준 1213] 팰린드롬 만들기 본문

알고리즘 문제풀이/백준

[백준 1213] 팰린드롬 만들기

홍시홍 2020. 2. 15. 15:29

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

 

1213번: 팰린드롬 만들기

첫째 줄에 문제의 정답을 출력한다. 만약 불가능할 때는 "I'm Sorry Hansoo"를 출력한다. 정답이 여러 개일 경우에는 사전순으로 앞서는 것을 출력한다.

www.acmicpc.net

요구사항

이름을 팰린드롬으로 만들기

 

풀이

반으로 나누어서 앞과 뒤가 똑같으면 팰린드롬이다

그러므로 조건이 만족할 경우 반으로 나눈 앞의 부분만 정렬한뒤 뒤에 똑같이 붙이면 된다

조건 1. 모든 숫자가 짝수 개

조건 2. 하나만 홀수개 나머지 짝수

 

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
struct go {
	int len;
	int sum;
	string str;
};

int n;
go map[1010];
go buf[1010];
//대문자 A-65 +26 92 a-97
int visit[100];

int main() {
	char ch[51];
	vector<char> v;
	cin >> ch;
	int flag = 0;
	int oddflag = 0;
	int oddnum = 0;
	for (int i = 0; ch[i] != 0; i++) {
		visit[(int)ch[i]]++;
	}
	for (int i = 65; i < 100; i++) {
		if (visit[i] == 0) continue;
		if (visit[i] % 2 == 1) {
			flag = 1;
			oddflag++;
			oddnum = i;
			continue;
		}
		if (visit[i] % 2 == 0) {
			int now = visit[i] / 2;
			for (int j = 0; j < now; j++)
			{
		//		cout << "D" << endl;
				v.push_back(i);
			}
		}
	}
	if (flag == 0)
	{
		sort(v.begin(), v.end());
		vector<char> ans;
		for (int i = 0; i < v.size(); i++) {
			ans.push_back(v.at(i));
		}
		for (int i = v.size() - 1; i >= 0; i--) {
			ans.push_back(v.at(i));
		}
		for (int i = 0; i < ans.size(); i++) {
			cout << ans.at(i);
		}
	}
	else if (flag == 1 && oddflag>1) {
		cout << "I'm Sorry Hansoo" << endl;
	}
	else if (flag == 1 && oddflag == 1) {
	//	cout << "A" << endl;
		int now = visit[oddnum];
		for (int j = 0; j < now/2; j++)
		{
	//		cout << "B" << endl;
			v.push_back(oddnum);
		}
		sort(v.begin(), v.end());
		vector<char> ans;
		for (int i = 0; i < v.size(); i++) {
			ans.push_back(v.at(i));
		}
		ans.push_back(oddnum);
		for (int i = v.size() - 1; i >= 0; i--) {
			ans.push_back(v.at(i));
		}
		for (int i = 0; i < ans.size(); i++) {
			cout << ans.at(i);
		}
	}

}

'알고리즘 문제풀이 > 백준' 카테고리의 다른 글

[백준 2512] 예산  (0) 2020.02.19
[백준 2211] 네트워크 복구  (0) 2020.02.15
[백준 1431] 시리얼 번호  (0) 2020.02.15
[백준 1936] 소수 경로  (0) 2020.02.13
[백준 16234] 인구 이동  (0) 2020.02.08
Comments