맞왜틀 ㅡㅡ
뇌절좀 친 문제였다.
팰린드롬을 만들 수 있는 문자열의 특징은
각 문자가 짝수개이여야 하는데,
홀수개인 문자는 하나만 존재하거나 없어야 한다.
이 특성에 맞는지 체크한다음, 아니면 I'm Sorry Hansoo를,
맞다면 팰린드롬으로 출력하면 되는 문제이다.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int alpha[1234] = {0};
char arr[100] = {0};
int main(){
scanf("%s", arr);
int len = strlen(arr);
char out=0;
for(int i=0; i<len; i++){ if('A'<=arr[i] && arr[i]<='Z') alpha[arr[i]]++; }
int chk = 0;
for(int i='A'; i<='Z'; i++) if(alpha[i]%2 == 1){ chk++; out=i; }
if(chk != 1 && chk != 0){ printf("I\'m Sorry Hansoo"); return 0; }
for(int i='A'; i<='Z'; i++){
if(alpha[i] != 0){
int tmp = alpha[i]/2;
for(int j=0; j<tmp; j++) printf("%c", i);
alpha[i]-=tmp;
}
}
if(out != 0){
printf("%c", out);
alpha[out]--;
}
for(int i='Z'; i>='A'; i--){
if(alpha[i] != 0){
for(int j=0; j<alpha[i]; j++) printf("%c", i);
}
}
return 0;
}
alpha는 문자의 등장횟수를 세는 배열이다.
int chk = 0;
for(int i='A'; i<='Z'; i++) if(alpha[i]%2 == 1){ chk++; out=i; }
if(chk != 1 && chk != 0){ printf("I\'m Sorry Hansoo"); return 0; }
이 부분에서 팰린드롬의 조건을 체크하고,
for(int i='A'; i<='Z'; i++){
if(alpha[i] != 0){
int tmp = alpha[i]/2;
for(int j=0; j<tmp; j++) printf("%c", i);
alpha[i]-=tmp;
}
}
사전순 출력이므로
A부터 시작해서
짝수개인 알파벳들을 출력할때
"절반만" (팰린드롬을 만들어야 하므로) 사전순으로 출력해주었고,
if(out != 0){
printf("%c", out);
alpha[out]--;
}
홀수개인 문자가 있는 경우 해당 문자를 따로 출력해주고,
for(int i='Z'; i>='A'; i--){
if(alpha[i] != 0){
for(int j=0; j<alpha[i]; j++) printf("%c", i);
}
}
마지막으로 남은 문자들은
팰린드롬을 만들어야 하므로
역순으로 출력해주면
깔끔하게 AC가 나온다.
반응형