728x90
시간 제한 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
'ALGORITHM > 정렬, 탐색,구현' 카테고리의 다른 글
[백준 1300번] 파이썬 - K번째 수 (0) | 2023.09.04 |
---|---|
[백준 17144번] 파이썬 - 미세먼지 안녕! (0) | 2023.09.03 |
[백준 2900번] 파이썬 - 프로그램 (0) | 2023.08.31 |
[백준 14921번] 파이썬 - 용액 합성하기 (0) | 2023.08.28 |
[백준 15787번] 파이썬 - 기차가 어둠을 헤치고 은하수를 (0) | 2023.08.25 |