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

김현섭·2023년 7월 4일
1

[C++] 백준

목록 보기
11/36

백준 1213

🌲 문제 요약

입력받은 영어 이름을 팰린드롬으로 바꾸는 문제.

🌲 문제 풀이

배열 arr에 영어 이름의 정보를 담은 뒤, 문자열 ret의 앞과 뒤에 arr에 담긴 각각의 알파벳을 사전 역순으로 입력받은 개수만큼 추가한다.

mid가 존재할 시, 반복문을 마친 이후 ret의 가운데 위치에 mid를 삽입하여 출력한다.

🌲 주의

영어 이름에 홀수 개의 알파벳이 두 개 이상 존재할 시, 오류 문구를 출력해야 한다.

홀수 개의 알파벳을 만날 때마다 flag에 1을 추가하여, 만약 flag의 값이 2가 되면 "I'm Sorry Hansoo"를 출력한다.

🌲 코드

#include <bits/stdc++.h>

using namespace std;
string s, ret;
int arr[100], flag;
char mid;

int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	
	cin >> s;
	for (char a : s) arr[a]++; 
	
	for (int i = 'Z'; i >= 'A'; i--) {
		if (arr[i]) {
			if (arr[i] & 1) {
				mid = char(i);
				flag++;
				arr[i]--;
			}
			if (flag == 2) break; // 홀수 개의 알파벳이 두 개 이상 존재할 시, break
			
			for (int j = 0; j < arr[i]; j += 2) {
				ret = char(i) + ret;
				ret += char(i);
			} // ret의 앞과 뒤에 char(i) 추가
		}
	}
	if (flag == 2) cout << "I'm Sorry Hansoo" << '\n';
	else {
		if (mid) {
			ret.insert(ret.begin() + ret.size() / 2, mid);
		}
		cout << ret << '\n';
	}
	
	return 0;
}

profile
오롯이 밤길을 달래는 별에게로

0개의 댓글