팰린드롬은 알고리즘의 단골 소재이다.
이번 문제는, 팰린드롬을 만들어야 하는 문제이다.
팰린드롬은, 문자열를 뒤집어도 같은 문자열이 되어야 한다.
주어진 문자열을 통해서, 각 대문자 알파벳의 개수를 파악하고 짝수냐 홀수에 따라서 문자열을 처리해주면 된다.
팰린드롬이 불가능한 경우는, 홀수인 알파벳이 1개 초과되면 팰린드롬이 불가능하게 된다.
위의 말들을 바탕으로 코드를 구현하면 아래와 같다.
해설코드(C++).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
#include <iostream>
#include <string>
using namespace std;
int arr[26] = { 0 };
string s;
char c = ' ';
int main() {
cin >> s;
bool odd = true;
for(int i = 0; i < s.length(); i++){
arr[s[i] - 'A'] += 1;
}
s = "";
for(int i = 0; i < 26; i++){
if(arr[i] % 2 != 0){
if(odd){
odd = false;
c = i + 'A';
}else{
cout << "I'm Sorry Hansoo" << endl;
return 0;
}
}
for(int j = 1; j <= arr[i] / 2; j++) s += ('A' + i);
}
int len = s.length();
if(c != ' ') s += c;
for(int i = len - 1; i >= 0; i--)
s += s[i];
cout << s << endl;
return 0;
}
|
'알고리즘 > 백준' 카테고리의 다른 글
[BOJ 1080] 행렬(C++) (0) | 2020.06.20 |
---|---|
[BOJ 1049] 기타줄 (0) | 2020.06.16 |
[BOJ 1946] 신입사원 (0) | 2020.06.14 |
[BOJ 7453] 합이 0인 네 정수 (0) | 2020.06.13 |
[BOJ 2875] 대회 or 인턴(반복문없는 if문 풀이, 시간복잡도 최소화) (0) | 2020.06.08 |