문제
문자열 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문을 돌려서 비교하는 방법으로 풀었다.
'백준 온라인 저지 (BOJ) 문제풀이' 카테고리의 다른 글
백준 온라인 저지 (BOJ) 11723 집합 (0) | 2020.09.24 |
---|---|
백준 온라인 저지 (BOJ) 10026 적록색약 (0) | 2020.09.24 |
백준 온라인 저지 (BOJ) 11051 이항계수 2 (0) | 2020.09.23 |
백준 온라인 저지 (BOJ) 1932 정수 삼각형 (0) | 2020.09.23 |
백준 온라인 저지 (BOJ) 10709 기상캐스터 (0) | 2020.09.23 |