본문 바로가기
PROGRAMMING CODE/C

[BAEKJOON] No.12871 C언어

by daye_ 2022. 10. 20.

 

무한문자열

 

 

간만에 문제 풀었더니 c언어도 잘 모르겠어서 상당히 곤란하다 ㅎㅎ;;

뭘로 입력받을지도 기억안남ㅋㅋㅋㅋㅋㅎ0ㅎ,,

 

 

 

 

12871번: 무한 문자열

첫째 줄에 s, 둘째 줄에 t가 주어진다. 두 문자열 s와 t의 길이는 50보다 작거나 같은 자연수이고, 알파벳 소문자로만 이루어져 있다. 

www.acmicpc.net

 

최소공배수만큼 문자열이 같으면 무한반복해도 같다.

최소공배수를 구하려면 최대공약수가 필요하기 때문에 같이구해줬다.

 

본인은 계속 오버플로우가 나서 초기화때문인가 싶어서 {0,} 다 넣어줬는데 아니었음....

sroof, troof의 크기가 너무 작아서 오버플로우가 생겼다

 

 

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

int GCD(int a, int b){ //최대공약수
    return (a%b==0?b:GCD(b,a%b));
}
int LCM(int a, int b){ //최소공배수
    return (a*b)/GCD(a,b);
}

int main(int argc, const char * argv[]) {
    char s[50]={0,},t[50]={0,};
    int slen,tlen,n;
    scanf("%s %s",s,t);
    
    slen=strlen(s); //문자열 길이 구하기
    tlen=strlen(t);
    n=LCM(slen,tlen); //최소공배수
    
    char sroof[5000]={0,},troof[5000]={0,}; //이어붙일 문자열의 저장소 생성
    
    for(int i=0; i<n; i+=slen){strcat(sroof,s);}//최대공약수/문자열길이 만큼 붙이기
    for(int i=0; i<n; i+=tlen){strcat(troof,t);}
    
    if(strcmp(sroof,troof)==0) printf("1\n");
    else printf("0\n");
    
    return 0;
}

 

'PROGRAMMING CODE > C' 카테고리의 다른 글

[C] 소켓통신  (0) 2023.09.11
[BACKJOON] No.2164 C언어  (0) 2021.12.11
[BAEKJOON] No.1032 C언어  (0) 2021.10.19
[BAEKJOON] No.1026 C언어  (0) 2021.10.19
[BAEKJOON] No.1094 C언어  (0) 2021.10.19