본문 바로가기
프로그램/C언어 1000제

C언어 237제] NCP Nextop Lv.3 애너그램

by 건티 2025. 3. 18.
728x90

출처 : 반크_반크 20년 백서

 

문제]

2013 HSPC 2번

두 단어 A와 B가 주어졌을 때, A에 속하는 알파벳의 순서를 바꾸어서 B를 만들 수 있다면, A와 B를 애너그램이라고 한다.

두 단어가 애너그램인지 아닌지 구하는 프로그램을 작성하시오.

입력
첫째 줄에 테스트 케이스의 개수(<100)가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 길이가 100을 넘지 않는 단어가 공백으로 구분되어서 주어진다. 단어는 알파벳 소문자로만 이루어져 있다.

출력
각 테스트 케이스마다 애너그램인지 아닌지를 예체 출력과 같은 형식으로 출력한다. 

출력 형식
정확한 출력 형식은 제출에서 언어를 Java로 설정하면 확인할 수 있다.

예제 입력 1
3
blather reblath
maryland landam
bizarre brazier

예제 출력 1
blather & reblath are anagrams.
maryland & landam are NOT anagrams.
bizarre & brazier are anagrams.


출처 : 백준_6996번

 

참고풀이]

#include <stdio.h>
#include <string.h>

int main()
{
   int T;//테스트 케이스 수 변수 
   int Acnt[26],Bcnt[26];
   int i,j;
   int chk;

   scanf("%d",&T);
   if(T>0 && T<100)
   {
      for(i=1;i<=T;i++)
      {
         char A[100]={'\0',};
         char B[100]={'\0',};
         for(j=0;j<26;j++) { Acnt[j]=0; Bcnt[j]=0;}

 

         scanf("%s%s",A,B);
         if(strlen(A)>=100 && strlen(B)>=100) break;
         if(strlen(A) != strlen(B))
            printf("%s & %s are NOT anagrams.\n",A,B);
         else
         {
            for(j=0;j<strlen(A);j++) Acnt[A[j]-'a']++;
            for(j=0;j<strlen(B);j++) Bcnt[B[j]-'a']++;

            chk=1;
            for(j=0;j<26;j++)
               if(Acnt[j] != Bcnt[j]) 
               {
                  chk=0; break;
               }

            if(chk)
               printf("%s & %s are anagrams.\n",A,B);
            else
               printf("%s & %s are NOT anagrams.\n",A,B);
         }
      }
   }
   return 0;
}

 

참고풀이 결과]

 

 

 

 

 

대한민국의 아름다운 영토, 독도의 겨울

 

반응형

댓글