하루에 한 문제
[BOJ-12871] 무한문자열 -Java 본문
https://www.acmicpc.net/problem/12871
package algo;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class boj_12871_무한문자열 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s=br.readLine();
String t=br.readLine();
StringBuilder ss=new StringBuilder(s);
StringBuilder tt=new StringBuilder(t);
int sLen=s.length();
int tLen=t.length();
int lcm=(sLen*tLen)/gcd(Math.max(sLen, tLen),Math.min(sLen, tLen));
for(int i=0; i<lcm/sLen-1; i++) {
ss.append(s);
}
for(int i=0; i<lcm/tLen-1; i++) {
tt.append(t);
}
int result= (ss.toString().equals(tt.toString())) ? 1:0;
System.out.println(result);
}
private static int gcd(int max, int min) {
while(min!=0) {
int remainder=max%min;
max=min;
min=remainder;
}
return max;
}
}
소요시간 : 15분
로직을 살펴보면
1. s의 길이와 t의 길이에 대해 최소공배수를 구한다 (유클리드 호제법 이용)
2. 최소공배수/자신의 길이 만큼 for문을 통해 s, t 의 길이를 최소공배수가 될 때까지 더해준다.
유클리드 호제법을 모르신다면 제 블로그에 잘 정리되어 있습니닿ㅎ
끝~~
'알고리즘 > 백준' 카테고리의 다른 글
[BOJ-17825]주사위 윷놀이 -Java (0) | 2021.03.31 |
---|---|
[BOJ-11399]ATM -Java (0) | 2021.03.30 |
[BOJ-13460]구슬탈출2 -Java (0) | 2021.03.28 |
[BOJ-20058]마법사상어와 파이어스톰 -Java (0) | 2021.03.28 |
[BOJ-1194]달이차오른다, 가자 -Java (0) | 2021.03.25 |
Comments