티스토리 뷰
https://www.acmicpc.net/problem/1213
팰린드롬(Palindrome)이란 앞에서부터 읽으나 뒤에서부터 읽으나 같은 단어를 말한다. 예를 들면 abba, abbba, abcdcba 등이 팰린드롬이다. 이 문제는 문자열이 주어지고 적절히 위치를 바꿔서 팰린드롬을 만들 수 있는지 확인하는 문제이다.
1. 길이가 짝수이면 모든 알파벳의 개수도 짝수여야 한다.
2. 길이가 홀수이면 하나의 알파벳의 개수만 홀수여야 한다.
위의 조건을 만족하는지 확인하고 팰린드롬을 만들 수 있다면 사전 순으로 출력한다. 먼저 A~Z까지 순서대로 보면서 개수의 절반씩 출력하고 다시 거꾸로 Z~A까지 보면서 나머지 절반을 출력하면 사전 순이 됨을 알 수 있다. 길이가 홀수인 경우는 미리 해당 인덱스를 저장한 후 두번째 for문을 돌기 전에 하나를 출력해서 팰린드롬의 맨 가운데에 넣어준다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #include <cstdio> #include <cstring> char s[51]; int a[26],len,odd,oddi; int main() { scanf("%s",s); len=strlen(s); for(int i=0;i<len;i++) a[s[i]-'A']++; for(int i=0;i<26;i++) if(a[i]%2==1) odd++,oddi=i; if((len%2==0 && odd) || (len%2==1 && odd!=1)) { printf("I'm Sorry Hansoo"); return 0; } for(int i=0;i<26;i++) for(int j=0;j<a[i]/2;j++) printf("%c",'A'+i); if(len%2==1) printf("%c",'A'+oddi); for(int i=25;i>=0;i--) for(int j=0;j<a[i]/2;j++) printf("%c",'A'+i); return 0; } | cs |
'Algorithm > BOJ' 카테고리의 다른 글
1941 소문난 칠공주 (0) | 2018.02.23 |
---|---|
14716 현수막 (0) | 2018.02.22 |
7507 올림픽 게임 (0) | 2018.02.20 |
1005 ACM Craft (0) | 2018.02.20 |
6086 최대 유량 (0) | 2018.02.19 |