1213 - 팰린드롬 만들기

재찬·2023년 1월 12일
0

Algorithm

목록 보기
13/64

문제

코드

#include <bits/stdc++.h>
using namespace std;

string str, out;
int arr[27] = {0, };
int flag = 0;
char mid;

int main(){
	cin >> str;
	
	for(char a : str) arr[a]++;
	
	for(int i = 'Z'; i >= 'A'; i--){
		if(arr[i] & 1){
			mid = char(i); flag++;
			arr[i]--;
		}
		if(flag == 2) break;
		for(int j = 0; j < arr[i]; j+=2){
			out = char(i) + out;
			out += char(i);
		}
	}
	
	if(mid) out.insert(out.begin() + out.size() / 2, mid);
	if(flag == 2) cout << "I'm Sorry Hansoo\n";
	else{
		cout << out << '\n';
	}
}

풀이

이런 문제는 지금까지의 경험상 되는 규칙을 찾거나,
안되는 경우를 제외 시키거나의 방법이 중요한듯 하다. 아니면 되는 부분엔 되는 규칙 적용, 안되는 부분은 제외 모두 혼합.
문자열을 입력받고 문자열 분석 문자열(카운팅 배열)을 만들어서
그 정보로 규칙에 맞게 재배치한다.
재배치에서는 안되는 경우의 수를 제외시킨다.

결과

후기

요새 문제가 주어졌을 때 힌트가 없으면 스스로 풀어내기 쉽지가 않다.
생각이 가깝게 와도 중요한 하나가 부족해서 못풀어낸다...
경험 부족이라 생각하고 꾸준히 해야겠다.

0개의 댓글