[백준 C++] 12871. 무한 문자열

garden.97·2021년 12월 27일
0

백준 C++

목록 보기
15/28
post-thumbnail

문제링크

문제

문자열 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;

}
profile
who wants to become a backend developer💪👩‍💻

0개의 댓글