관리 메뉴

솜씨좋은장씨

[BaekJoon] 12871번 : 무한 문자열 (Python) 본문

Programming/코딩 1일 1문제

[BaekJoon] 12871번 : 무한 문자열 (Python)

솜씨좋은장씨 2021. 7. 14. 00:44
728x90
반응형

코딩 1일 1문제! 오늘의 문제는 백준의 무한 문자열 입니다.

 

12871번: 무한 문자열

첫째 줄에 s, 둘째 줄에 t가 주어진다. 두 문자열 s와 t의 길이는 50보다 작거나 같은 자연수이고, 알파벳 소문자로만 이루어져 있다. 

www.acmicpc.net

Solution

import math

def get_least_common_multiple(string_s_len, string_t_len):
    return string_s_len * string_t_len // math.gcd(string_s_len, string_t_len)

def infinity_string(string_s, string_t):
    is_infinity_string = 0
    string_s_len = len(string_s)
    string_t_len = len(string_t)
        
    standard_len = get_least_common_multiple(string_s_len, string_t_len)
    
    s_multiply_num = standard_len // string_s_len
    t_multiply_num = standard_len // string_t_len
    
    if string_s * s_multiply_num == string_t * t_multiply_num:
        is_infinity_string = 1
        
    return is_infinity_string
    

if __name__ == "__main__":
    string_s = input()
    string_t = input()
    print(infinity_string(string_s, string_t))

Solution 풀이

이 문제는 문자열 s와 문자열 t를 각각 무한대로 이어붙였을때 

그 무한으로 이어붙인 값이 같은지 다른지를 확인하는 문제입니다.

무한으로 이어붙이고 확인하려면 끝나지않는 연산이기에 

맨 처음 같아지는 지점을 찾아야합니다.

바로 그 지점이 두 문자열의 길이의 최소공배수 입니다.

두 문자열을 입력받으면 각 문자열의 길이를 구한 다음

두 문자열 길이의 최소공배수 = 문자열 s의 길이 X 문자열 t의 길이 // 문자열 s의 길이와 문자열 t의 길이의 최대공약수

위의 공식대로 값을 구합니다.

그리고 각 문자열을 얼마나 반복해야하는지 각각 값을 구한다음

해당 횟수만큼 반복한 문자열끼리 비교하여 같으면 1 다르면 0을 출력하도록 하면 끝!

 

SOMJANG/CODINGTEST_PRACTICE

1일 1문제 since 2020.02.07. Contribute to SOMJANG/CODINGTEST_PRACTICE development by creating an account on GitHub.

github.com

Comments