백준

[백준][Kotlin]1934번 최소공배수

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

최소공배수 혹은 최대 공약수를 구하는 문제는 유클리드 호제법을 이용하면 쉽게 작성 할 수 있습니다.

예시를 들어 설명 하겠습니다.

a :6

b: 10

라고 가정 하였을 때

gcd 함수를 만듭니다.(일반적으로 최대공약수 혹은 최소공부수 함수를 gcd라고 합니다.)

gcd함수의 내용은 2개의 입력값을 받으며 b가 0일 경우 a를 리턴합니다. (먼저 넣는 값이 크다고 가정)

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

이렇게 리턴 받은 값은 최대공약수 가 됩니다.

10,6 -> 6,4 -> 4,2 -> 2,0 (이때 a 큰 수 가 최대 공약수가 됩니다.)

최소공배수는 처음 a와b를 곱한 후 구한 최대공약수로 나누어 주면 구할 수 있습니다.

하기 코드는 백준 1934번 최소공배수 문제에 대한 코드와 제출 결과 입니다.

 

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()

    repeat(N){
        st = StringTokenizer(br.readLine())
        var a = st.nextToken().toInt()
        var b = st.nextToken().toInt()
        bw.appendLine((a*b/gcd(a,b)).toString())
    }

    bw.flush()
    bw.close()
}

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