[Kotlin] 프로그래머스 소수찾기

Heejin Ryu·2021년 8월 2일
0

Algorithm

목록 보기
13/14

풀이 방법

  1. DFS를 사용해야겠다고 생각했다.
  2. 0으로 시작하는 것은 아예 첫 시작 자체를 안해도 된다고 생각했다.
  3. 소수 판별을 할 때, 1은 소수가 아니므로 1이 isPrime함수에 들어왔을 경우 바로 false를 해주었다.
  4. Set에 넣어서 같은 값이 나왔을 때 중복체크를 해주었다.
class `42839소수찾기` {
    var countSet = mutableSetOf<String>()
    fun solution(numbers: String): Int {
        var answer = 0
        val numberList = numbers.split("")
            .toMutableList().subList(1, numbers.length+1)
        for (i in 0..numberList.size-1) {
            val tmp = numberList[i]
            if (tmp.toInt() == 0) {
                continue
            }
            numberList.removeAt(i)
            find(numberList, i, tmp)
            numberList.add(i, tmp)
        }
        return countSet.size
    }
    fun find(numberList: MutableList<String>, index: Int, s: String) {
        if (s.toLong().isPrime()) {
            countSet.add(s)
        }
        if (numberList.size == 0) {
            return
        }
        for (i in 0..numberList.size-1) {
            val tmp = numberList[i]
            numberList.removeAt(i)
            find(numberList, i, s+tmp)
            numberList.add(i, tmp)
        }
        return
    }
    fun Long.isPrime(): Boolean {
        var num = this
        if (num.toInt() == 1) return false
        for (i in (2 .. num.toInt()-1)) {
            if (num.toInt() % i == 0) return false
        }
        return true
    }
}

fun main() {
    `42839소수찾기`().solution("17")
}
profile
Chocolate lover🍫 & Junior Android developer🤖

0개의 댓글