검색을 해보았는데,
'문자열의 순서를 재배치해서 새로운 문자열을 만드는 것'
이라고 이해를 하였습니다.
그래서 굳이 문자열을 정렬하지 않고 문자열 내의 알파벳 개수를 세어 비교 하였습니다.
(각 알파벳의 개수가 같아야 같은 문자열이다.)
질문은 이 방법으로 풀이를 할 때, 예외 케이스가 있을까? 하는 것입니다.
예시 케이스는 잘되는데 제출하면 오류가 나오네요.
#include<stdio.h>
#include<string.h>
//#include<stdlib.h>
int main(){
char str1[101]={0,}, str2[101]={0,};
int case_num;
int alpha1[26]={0,}, alpha2[26]={0,};
int i=0;
int j, check;
int str1_length;
int str2_length;
char temp;
//FILE *fp;
//fp = fopen("input.txt", "r");
//fscanf(fp, "%d", &case_num);
scanf("%d", &case_num);
while(i < case_num){
//fscanf(fp, "%s", str1);
//fscanf(fp, "%s", str2);
scanf("%s", str1);
scanf("%s", str2);
str1_length = strlen(str1);
str2_length = strlen(str2);
if(str1_length != str2_length){
printf("No.\n", str1, str2);
i++;
continue;
}
else if(strcmp(str1,str2) == 0){
printf("No.\n");
i++;
continue;
}
for(j=0;j<str1_length; j++){
switch(str1[j]){
case 'a' : alpha1[0]++;break;
case 'b' : alpha1[1]++;break;
case 'c' : alpha1[2]++;break;
case 'd' : alpha1[3]++;break;
case 'e' : alpha1[4]++;break;
case 'f' : alpha1[5]++;break;
case 'g' : alpha1[6]++;break;
case 'h' : alpha1[7]++;break;
case 'i' : alpha1[8]++;break;
case 'j' : alpha1[9]++;break;
case 'k' : alpha1[10]++;break;
case 'l' : alpha1[11]++;break;
case 'm' : alpha1[12]++;break;
case 'n' : alpha1[13]++;break;
case 'o' : alpha1[14]++;break;
case 'p' : alpha1[15]++;break;
case 'q' : alpha1[16]++;break;
case 'r' : alpha1[17]++;break;
case 's' : alpha1[18]++;break;
case 't' : alpha1[19]++;break;
case 'u' : alpha1[20]++;break;
case 'v' : alpha1[21]++;break;
case 'w' : alpha1[22]++;break;
case 'x' : alpha1[23]++;break;
case 'y' : alpha1[24]++;break;
case 'z' : alpha1[25]++;break;
case 'A' : alpha1[0]++;break;
case 'B' : alpha1[1]++;break;
case 'C' : alpha1[2]++;break;
case 'D' : alpha1[3]++;break;
case 'E' : alpha1[4]++;break;
case 'F' : alpha1[5]++;break;
case 'G' : alpha1[6]++;break;
case 'H' : alpha1[7]++;break;
case 'I' : alpha1[8]++;break;
case 'J' : alpha1[9]++;break;
case 'K' : alpha1[10]++;break;
case 'L' : alpha1[11]++;break;
case 'M' : alpha1[12]++;break;
case 'N' : alpha1[13]++;break;
case 'O' : alpha1[14]++;break;
case 'P' : alpha1[15]++;break;
case 'Q' : alpha1[16]++;break;
case 'R' : alpha1[17]++;break;
case 'S' : alpha1[18]++;break;
case 'T' : alpha1[19]++;break;
case 'U' : alpha1[20]++;break;
case 'V' : alpha1[21]++;break;
case 'W' : alpha1[22]++;break;
case 'X' : alpha1[23]++;break;
case 'Y' : alpha1[24]++;break;
case 'Z' : alpha1[25]++;break;
}
}
for(j=0;j<str2_length; j++){
switch(str2[j]){
case 'a' : alpha2[0]++;break;
case 'b' : alpha2[1]++;break;
case 'c' : alpha2[2]++;break;
case 'd' : alpha2[3]++;break;
case 'e' : alpha2[4]++;break;
case 'f' : alpha2[5]++;break;
case 'g' : alpha2[6]++;break;
case 'h' : alpha2[7]++;break;
case 'i' : alpha2[8]++;break;
case 'j' : alpha2[9]++;break;
case 'k' : alpha2[10]++;break;
case 'l' : alpha2[11]++;break;
case 'm' : alpha2[12]++;break;
case 'n' : alpha2[13]++;break;
case 'o' : alpha2[14]++;break;
case 'p' : alpha2[15]++;break;
case 'q' : alpha2[16]++;break;
case 'r' : alpha2[17]++;break;
case 's' : alpha2[18]++;break;
case 't' : alpha2[19]++;break;
case 'u' : alpha2[20]++;break;
case 'v' : alpha2[21]++;break;
case 'w' : alpha2[22]++;break;
case 'x' : alpha2[23]++;break;
case 'y' : alpha2[24]++;break;
case 'z' : alpha2[25]++;break;
case 'A' : alpha2[0]++;break;
case 'B' : alpha2[1]++;break;
case 'C' : alpha2[2]++;break;
case 'D' : alpha2[3]++;break;
case 'E' : alpha2[4]++;break;
case 'F' : alpha2[5]++;break;
case 'G' : alpha2[6]++;break;
case 'H' : alpha2[7]++;break;
case 'I' : alpha2[8]++;break;
case 'J' : alpha2[9]++;break;
case 'K' : alpha2[10]++;break;
case 'L' : alpha2[11]++;break;
case 'M' : alpha2[12]++;break;
case 'N' : alpha2[13]++;break;
case 'O' : alpha2[14]++;break;
case 'P' : alpha2[15]++;break;
case 'Q' : alpha2[16]++;break;
case 'R' : alpha2[17]++;break;
case 'S' : alpha2[18]++;break;
case 'T' : alpha2[19]++;break;
case 'U' : alpha2[20]++;break;
case 'V' : alpha2[21]++;break;
case 'W' : alpha2[22]++;break;
case 'X' : alpha2[23]++;break;
case 'Y' : alpha2[24]++;break;
case 'Z' : alpha2[25]++;break;
}
}
//printf("\tA\tB\tC\tD\tE\tF\tG\tH\tI\tJ\tK\tL\tM\tN\tO\tP\tQ\tR\tS\tT\tU\tV\tW\tX\tY\tZ\n");
for(j=0; j<26; j++){
//if(alpha1[j] == alpha2[j]) temp = 'o';
//else temp = 'x';
//printf("%2d%2d%c\t", alpha1[j], alpha2[j], temp);
if(alpha1[j] != alpha2[j]){
check=11;
}
}
//printf("\n");
if(check == 11){
printf("No.\n");
}
else printf("Yes\n");
memset(str1, 0, sizeof(str1));
memset(str2, 0, sizeof(str2));
memset(alpha1, 0, sizeof(alpha1));
memset(alpha2, 0, sizeof(alpha2));
i++;
check =0;
}
//system("pause");
return 0;
}
JJackS
[[problem:ANAGRAM]]
검색을 해보았는데,
'문자열의 순서를 재배치해서 새로운 문자열을 만드는 것'
이라고 이해를 하였습니다.
그래서 굳이 문자열을 정렬하지 않고
문자열 내의 알파벳 개수를 세어 비교 하였습니다.
(각 알파벳의 개수가 같아야 같은 문자열이다.)
질문은 이 방법으로 풀이를 할 때, 예외 케이스가 있을까? 하는 것입니다.
예시 케이스는 잘되는데 제출하면 오류가 나오네요.
13년 전