티스토리 뷰

Algorithm/BOJ

1213 팰린드롬 만들기

henry1214 2018. 2. 22. 15:43

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==1printf("%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
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday