본문 바로가기

백준 온라인 저지 (BOJ) 문제풀이

백준 온라인 저지 (BOJ) 12871 무한 문자열

문제

문자열 s가 있을 때, f(s)는 s를 무한번 붙인 문자열로 정의한다. 예를 들어, s = "abc" 인 경우에 f(s) = "abcabcabcabc..."가 된다.

다른 문자열 s와 t가 있을 때, f(s)와 f(t)가 같은 문자열인 경우가 있다. 예를 들어서, s = "abc", t = "abcabc"인 경우에 f(s)와 f(t)는 같은 문자열을 만든다.

s와 t가 주어졌을 때, f(s)와 f(t)가 같은 문자열을 만드는지 아닌지 구하는 프로그램을 작성하시오.

입력

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

출력

첫째 줄에 f(s)와 f(t)가 같으면 1을, 다르면 0을 출력한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include<stdio.h>
#include<string.h>
#pragma warning(disable:4996)
#pragma warning(disable:6031)
int gcd(int a, int b) {
    if (b == 0)return a;
    else return gcd(b, a % b);
}
char s[51];
char t[51];
int solve() {
    int len1, len2, len3;
    scanf("%s", s);
    len1 = strlen(s);
    getchar();
    scanf("%s", t);
    len2 = strlen(t);
    len3 = len1 * len2 / gcd(len1, len2);
    for (int i = 0; i < len3; i++)
        if (s[i % len1] != t[i % len2])return 0;
    return 1;
}
int main()
{
    printf("%d\n", solve());
    return 0;
}
cs

 

 

두 문자열 길이의 최소 공배수까지 for문을 돌려서 비교하는 방법으로 풀었다.