문자열 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
ab
abab
// 예제 출력 1
1
// 예제 입력 2
abc
bca
// 예제 출력 2
0
📍 알고리즘
➰ 주의할 점
문자열의 크기가 더 큰 문자열 기준으로만 검사하게 되면 예외가 발생함
ex.
ab, ababa인 경우 반복하면 ababab..., ababaababa... 로 동일하지 않지만 ababa까지만 검사하기 때문에 동일하다고 처리할 수 있으므로 최대 문자열 길이의 2배만큼 검사해줘야함
using namespace std;
int main(void) {
string s, t;
int max_length;
cin >> s >> t;
if (s.length() > t.length()) max_length = s.length();
else max_length = t.length();
for (int i = 0; i < 2 * max_length; i++) {
if (s[i % s.length()] != t[i % t.length()]) {
cout << 0;
return 0;
}
}
cout << 1;
}