본문 바로가기
  • 개발하는 곰돌이
Algorithm/BOJ

[Kotlin] 백준 12871 : 무한 문자열

by 개발하는 곰돌이 2023. 3. 15.

문제 링크

 

12871번: 무한 문자열

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

www.acmicpc.net


문제 해설

서로 다른 두 문자열을 각각 무한히 이어 붙였을 때 같은 문자열이 되는지 확인하려면 서로 같아질 때까지 계속 이어 붙여서 비교하는 방법이 있다. 문자열의 최대 길이가 50으로 매우 작기 때문에 이 방법으로 거뜬히 해결할 수 있다.

 

s = "abab", t = "ababab"인 경우를 예로 들 수 있다. 이 경우의 풀이 과정은 다음과 같아진다.

  1. s의 길이가 t보다 작으므로 s를 한번 이어 붙인다. → s' = "abababab", t = "ababab"
  2. t의 길이가 s'보다 작으므로 t를 한번 이어 붙인다. → s' = "abababab", t' = "abababababab"
  3. s'의 길이가 t'보다 작으므로 s'에 s를 한번 이어 붙인다. → s' = "abababababab", t' = "abababababab"
  4. s'와 t'의 길이가 같으므로 두 문자열을 비교한다.

Code

fun main() = with(System.`in`.bufferedReader()) {
    val str1 = StringBuilder(readLine())
    val str2 = StringBuilder(readLine())
    val origin1 = str1.toString()
    val origin2 = str2.toString()
    while (str1.length != str2.length) {
        if (str1.length > str2.length) str2.append(origin2)
        if (str1.length < str2.length) str1.append(origin1)
    }
    println(if (str1.toString() == str2.toString()) 1 else 0)
}

 

댓글