https://www.acmicpc.net/problem/12871
12871번: 무한 문자열
첫째 줄에 s, 둘째 줄에 t가 주어진다. 두 문자열 s와 t의 길이는 50보다 작거나 같은 자연수이고, 알파벳 소문자로만 이루어져 있다.
www.acmicpc.net
최소공배수를 구하는 방법으로 문제를 풀었다.
1. a와 b의 길이에 대한 최소공배수를 구해서,
2. A에다가 a의부분문자열을 이어준 합을 저장하고, 그 합의 길이가 최소공배수에 도달할때 까지 반복한다.
3. B에다가 b의부분문자열을 이어준 합을 저장하고, 그 합의 길이가 최소공배수에 도달할때 까지 반복한다.
4. A와 B가 같으면 1출력, 다르면 0 출력
ex)
aa
aaa
의 경우, aaa와 aaaaa의 길이에 대한 최소공배수 = 15 , 문자열 길이가 15가 될때까지 부분문자열 합치기 반복
A => aaa + aaa + aaa + aaa + aaa = aaaaaaaaaaaaaaa
B => aaaaa + aaaaa + aaaaa = aaaaaaaaaaaaaaa
A = B는 같으므로 1출력.
코드(c++)
#include <string>
#include <vector>
#include <iostream>
using namespace std;
int gcd(int a,int b){
int c;
while (b != 0) {
c = a%b;
a = b;
b = c;
}
return a;
}
int main(){
// ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
string a, b; // <= 50, 소문자
string A, B;
// abc == abcabc
// ab != abcabc
cin >> a >> b;
int minX = a.length() * b.length() / gcd(a.length(),b.length());
while(A.length() != minX){
A += a;
}
while (B.length() != minX) {
B += b;
}
if(A == B) cout << "1";
else cout << "0";
}
'코딩테스트 연습 > Baekjoon' 카테고리의 다른 글
[Baekjoon] 백준 1753번: 최단경로 (c++) (0) | 2022.05.28 |
---|---|
[Baekjoon] 백준 16953번: A → B (c++) (0) | 2022.05.21 |
[Baekjoon] 백준 14502번: 연구소 (c++) (0) | 2022.05.20 |
[Baekjoon] 백준 2644번: 촌수계산 (c++) (0) | 2022.05.06 |
[Baekjoon] 백준 2667번: 단지번호붙이기 (c++) (0) | 2022.05.05 |