반응형
문제출처
https://www.acmicpc.net/problem/1213
문제풀이
/**
* 1. 홀수개인 알파벳이 2개 이상이라면 펠린드롬을 만들 수 없음,
* 2. 짝수개인 알파벳을 n/2개 나열하고 홀수개인 알파벳을 나열한 후
* 나머지 짝수개 알파벳을 역순으로 나열하면 펠린드롬이 생성
*
* 정리하면 input 길이가 홀수라면 홀수개인 알파벳이 1개여야 하며,
* input 길이가 짝수라면 모든 알파벳의 갯수도 짝수개여야 한다.
* 이 조건을 통과하면 사전순으로 출력하는 문제이다. a~z까지 n/2개씩 출력하고
* 거꾸로 z~a까지 절반을 출력하면 사전순으로 출력된다.
*/
소스코드
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 | #include <iostream> #include <string> using namespace std; int alpha[26]; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); string input,answer=""; cin>>input; int len = input.size(); for(int i=0; i<len; i++) alpha[input[i]-'A']++; int oddCnt=0, center=-1; for(int i=0; i<26; i++) { if(alpha[i]%2) { oddCnt++; center=i; } } if((len%2 && oddCnt!=1) || (!(len%2) && oddCnt)) { cout<<"I'm Sorry Hansoo"; return 0; } for(int i=0; i<26; i++) for(int j=0; j<alpha[i]/2; j++) answer+=(char)i+'A'; if(center>-1) answer+=(char)center+'A'; for(int i=25; i>=0; i--) for(int j=0; j<alpha[i]/2; j++) answer+=(char)i+'A'; cout<<answer; return 0; } | cs |
반응형
'Algorithm' 카테고리의 다른 글
[BOJ 9935] 문자열 폭발 (0) | 2019.02.21 |
---|---|
[BOJ 1764] 듣보잡 (0) | 2019.02.20 |
[BOJ 1431] 시리얼 번호 (0) | 2019.02.18 |
[BOJ 1937] 욕심쟁이 판다 (0) | 2019.02.15 |
[BOJ 10989] 수정렬하기3 (0) | 2019.02.15 |