PROGRAMMING CODE/C
[BAEKJOON] No.12871 C언어
daye_
2022. 10. 20. 03:56
무한문자열
간만에 문제 풀었더니 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;
}