개발새발 - IT 기술블로그
article thumbnail

백준 알고리즘  - 코틀린 풀이

 

https://www.acmicpc.net/problem/2501

 

2501번: 약수 구하기

첫째 줄에 N과 K가 빈칸을 사이에 두고 주어진다. N은 1 이상 10,000 이하이다. K는 1 이상 N 이하이다.

www.acmicpc.net

 


 

 

문제


 

정답

 

import java.util.*

fun main() {
    val sc = Scanner(System.`in`)
    val N = sc.nextInt()
    val K = sc.nextInt()
    val array = ArrayList<Int>()

    for(i in 1.. N) {
        if (N % i == 0) {
            array.add(i)
        }
    }

    if (array.size >= K) {
        println(array[K-1])
    } else {
        println("0")
    }
}

 

 

풀이

해당 문제는 두 수를 입력받아 첫번째 숫자의 약수들 중 두번째 숫자 번째 수를 출력하는 문제입니다.

 

기본적으로 약수는 숫자를 나누었을 때 나머지가 0이되는 수들의 집합입니다.

 

따라서 아래와 같이 N을 i로 나누었을 때 나머지가 0이라면 소수로 판단하고 ArrayList<Int>에 add 시킵니다. 

for(i in 1.. N) {
    if (N % i == 0) {
        array.add(i)
    }
}

 

다음은 문제에서 주어진 조건인 K번째 약수가 존재하는지를 비교하고 약수 혹은 0을 출력하는 코드입니다.

 

이 때, 약수 비교는 1부터 시작했지만 배열의 인덱스는 0부터 시작하기 때문에, K가 아닌 K-1을 인덱스로 선언합니다.

if (array.size >= K) {
    println(array[K-1])
} else {
    println("0")
}

 

 

감사합니다.