백준

[백준][Kotlin]1850번 최대공약수

끝까지 처음처럼 2023. 3. 27. 21:23
728x90

해당문제 내 예제 3번을 보면 값이 매우 클 경우 일반 gcd 함수로는 원하는 결과 값을 찾을 수 없습니다.

하지만 문제를 잘 보면 1의 개수들은 입력받은 a와b의 최대 공약수의 길이를 나타냄을 알 수 있습니다.

3,4 의 최대 공약수는 1 이며, 예제 출력을 보면 "1"입니다.

두번째 예시를 보면 3,6의 최대 공약수는 3이며, 예제 출력은 "111"입니다.

그렇다면 입력받은 두 수의 최대공약수 많큼 1을 출력하면 원하는 결과 값이 나옴을 알 수 있습니다.

 

하기는 작성한 코드와 제출 결과 입니다.

 

import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
import java.util.*
import kotlin.math.sqrt


fun main() {
    val br = BufferedReader(InputStreamReader(System.`in`))
    var bw = BufferedWriter(OutputStreamWriter(System.out))
    var st = StringTokenizer(br.readLine())
    //var N = st.nextToken().toInt()

    var a = st.nextToken().toLong()
    var b = st.nextToken().toLong()

    var result = gcd(a,b).toInt()

    repeat(result){
        bw.append("1")
    }

    bw.flush()
    bw.close()
}

fun gcd(a: Long, b:Long):Long{
    if(b == 0L) {
        return a
    }else return gcd(b,(a%b))
}