728x90

백준 12871 - 무한 문자열

시간 제한 2초, 메모리 제한 512MB

# 조건

  • 문자열 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을 출력한다.

# 접근 방법

  • f(t)와 f(s)는 주어진 s와 t를 무한대로 이어붙인 것이라는 것을 이해해야 한다.
  • 즉, abab와 ababab는 무한대로 이어붙인다면 같은 문자열이 된다.
  • 따라서, 두 문자열의 길이의 최소 공배수만큼 이어 붙여서 만든 다음 확인하면 된다.
import sys  
sys.stdin = open('input.txt')  
input = sys.stdin.readline  
from math import lcm  

fs = input().strip()  
ft = input().strip()  
leng = lcm(len(fs), len(ft))  

fs *= leng // len(fs)  
ft *= leng // len(ft)  
print(1 if fs == ft else 0)
  • 사실 문자열의 길이가 짧아 최소 공배수가 아닌 서로의 길이를 곱해줘도 된다.
import sys  
sys.stdin = open('input.txt')  
input = sys.stdin.readline  

fs = input().strip()  
ft = input().strip()  
print(1 if fs*len(ft) == ft*len(fs) else 0)
728x90