기타등등/알고리즘 기록

[C++] 아나그램

CodeJB 2021. 6. 18. 21:33

#include <iostream>
#include <stdio.h>

int main() {
    char A[],B[];
    char str[100];
    int i;
    
    scanf("%s",&str);
    for(int i = 0; A[i] != '\0'; i++){
        if(str[i] >= 65 && str[i] <= 90){//소문자
            A[str[i] - 64]++; //해당 index에 count한다.
        }
        else if(str[i] >= 97 && str[i] <= 122){
            A[str[i] - 70]++; //해당 index에 count한다.
        }
    }
    
    scanf("%s",&str);
    for(int i = 0; B[i] != '\0'; i++){
        if(str[i] >= 65 && str[i] <= 90){//소문자
            B[str[i] - 64]++; //해당 index에 count한다.
        }
        else if(str[i] >= 97 && str[i] <= 122){
            B[str[i] - 70]++; //해당 index에 count한다.
        }
    }
    
    for(i =0; i<= 52; i++){
        if(A[i] != B[i]){
            printf("NO\n");
            exit(0);
        }
    }
    printf("Yes\n");
    return 0;
}

성찰

  • 이전에도 JAVA로 아나그램 문제를 해결한 적이 있었는데, Sort를 사용하지 않고 아스키코드를 이용하여 근본적인 해결방안으로 해결하였다.
  • 대소문자 구분이 가능하고 속도도 빨라서 가장 좋은 해결방안이라고 생각한다.
  • 무조건 A와 B에 입력하여 해결하려고 했었는데, str이라는 임의 배열에 입력하여 결과값을 A[],B[]에 대입하여 해결하는 방안이 굉장히 인상깊다.

'기타등등 > 알고리즘 기록' 카테고리의 다른 글

[C++]분노 유발자  (0) 2021.06.19
[C++]층간소음  (0) 2021.06.19
[C++]뒤집은 소수  (0) 2021.06.18
[C++]가장 많이 사용된 자릿수  (0) 2021.06.18
[C++] 숫자의 총 개수(Large)  (0) 2021.06.18