백준 1213 : 팰린드롬

혀니앤·2022년 3월 8일
0

C++ 알고리즘

목록 보기
104/118

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


이래서 커플이 문제야..

1. 접근

  • 팰린드롬은 앞으로 읽거나 거꾸로 읽어도 같은 문자열을 뜻한다.
  • 즉 모든 문자는 짝수개 있거나, 단 하나만 홀수개로 있어야 한다.
  • 나의 경우, 입력을 받을때 문자의 개수를 카운트해주고, 문자 카운트 배열의 처음부터 끝까지 진행하면서 ret 문자열에 대칭적으로 추가해주는 방식을 사용했다.
    => 출력이 사전순으로 가장 앞선 값을 택하기 때문에, 알파벳 순서가 빠를수록 문자열에도 앞에 있어야 하기 때문이다.
  • ret 사이즈를 잘못잡아서 출력상에는 똑같아보였지만 공백이 추가되어 틀렸습니다가 계속 나오는 오류가 있었다,, 눈에 안보인다고 맞는게 아닌것..

2. 나의 풀이

#include <iostream>
#include <cstring>
#include <string>
using namespace std;

int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	int alpha[27] = { 0, };
	memset(alpha, 0, 26);

	string input;
	cin >> input;

	for (int i = 0; i < input.length(); i++) {
		alpha[input[i] - 'A']++;
	}

	string ret;
	ret.resize(input.length());

	bool isOdd = false;
	int index = 0;
	for (int i = 0; i < 27; i++) {
		if (alpha[i] % 2 == 1) {
			if (!isOdd) {
				isOdd = true;
				ret[input.length() / 2] = (char)(i + 'A');
				alpha[i]--;
			}
			else {
				cout << "I'm Sorry Hansoo\n";
				return 0;
			}
		}
		while (alpha[i] > 0) {
			ret[index] = (char)(i + 'A');
			ret[input.length() - index-1] = (char)(i + 'A');
			index++;
			alpha[i] -= 2;
		}
	}
	cout << ret << "\n";

	return 0;
}
profile
일단 시작하기

0개의 댓글