728x90
반응형
문제
Anagram이란 두 문자열이 알파벳의 나열 순서를 다르지만 그 구성이 일치하면 두 단어는 아 나그램이라고 합니다.
예를 들면 AbaAeCe 와 baeeACA 는 알파벳을 나열 순서는 다르지만 그 구성을 살펴보면 A(2), a(1), b(1), C(1), e(2)로 알파벳과 그 개수가 모두 일치합니다.
즉 어느 한 단어를 재 배열하면 상대편 단어가 될 수 있는 것을 아나그램이라 합니다.
길이가 같은 두 개의 단어가 주어지면 두 단어가 아나그램인지 판별하는 프로그램을 작성하세 요. 아나그램 판별시 대소문자가 구분됩니다.
▣ 입력설명 첫 줄에 첫 번째 단어가 입력되고, 두 번째 줄에 두 번째 단어가 입력됩니다.
단어의 길이는 100을 넘지 않습니다.
▣ 출력설명 두 단어가 아나그램이면 “YES"를 출력하고, 아니면 ”NO"를 출력합니다.
입력 예제
AbaAeCe
baeeACA
출력 예제
YES
풀이
#include<stdio.h>
#inclue<algorithm>
using namespace std;
int a[60], b[60];
int main(){
char str[100];
int i;
scanf("%s", &str);
for(i=0; str[i]!='\0'; i++){
if(str[i]>=65 && str[90]<=90){ //대문자
a[str[i]-64]++; //대문자A면 65인데 64를 빼서 1번에 대문자A를 저장
}else {//소문자
a[str[i]-70]++;
}
}
scanf("%s", &str);
for(i=0; str[i]!='\0'; i++){
if(str[i]>=65 && str[90]<=90){
b[str[i]-64]++;
}else {
b[str[i]-70]++;
}
}
for(i=1; i<=52; i++){
if(a[i]!=b[i]) {
prinf("NO\n");
exit(0); //inclue<algorithm> 필요
}
}
printf("YES\n");
return 0;
}
[풀기전 알아야 할 정보]
* 아스키 코드값
대문자 (A-Z) : 65~90
소문자 (a-z) : 97~122 (대문자+32)
* 대문자, 소문자의 개수
각 각 26개로, 총 52개
첫번째 입력값을 str 배열에 먼저 담고,
a라는 배열 1번부터 26번째까지 알파벳 대문자 A부터 Z까지 담고, 27번째부터 52번째까지 소문자 a부터 z 의 개수를 담는다.
단, 입력값은 아스키 코드 값으로 저장되어지니 대문자는 65부터 90번째로 a[1]에 담기위해선 64를 빼면 된다. (A=65)
소문자는 97번째부터로 a[27]부터 소문자 a 부터 담으면 되니 70을 빼면 된다. (a=97)
b배열도 마찬가지로 담고, 배열 a와 b를 52배열 비교해서 다르면 "NO" 로 return 후 종료시킨다.
반응형
'IT_study > Coding test' 카테고리의 다른 글
[코딩테스트 / c++] Least Recently Used(2018 카카오 캐시 문제 변형) (0) | 2022.01.02 |
---|---|
[Coding test Basic with c++] N!의 표현법 (0) | 2021.12.27 |
[Coding test Basic with c++] 자릿수의 합 (0) | 2021.12.21 |
[Coding test Basic with c++] 모두의 약수 (0) | 2021.12.21 |
[Coding test Basic with c++] 올바른 괄호 (0) | 2021.12.16 |