프로그래머스 Lv2 소수찾기 Kotlin
문제
풀이방법
-
현재 주어진 String으로 만들 수 있는 가장 큰 값을 max로 두고 에라토스테네스의 체 적용, 소수를 먼저 구한다.
-
재귀로 조합을 만들어 각 수가 소수인지 확인하고 011 = 11처럼 같은 값을 조합할 것을 대비해 HashSet에 기존에 소수라고 판별했던 수들을 저장하여 이때는 카운트 하지 않도록 구현하였다.
코드
class Solution {
lateinit var isPrime : BooleanArray
lateinit var visit : BooleanArray
var sb = StringBuilder()
var cnt = 0
var primeSet = HashSet<Int>()
fun solution(numbers: String): Int {
var maxNum = numbers.toCharArray().sortedDescending()
var max= ""
maxNum.forEach{
max += it
}
isPrime = BooleanArray(max.toInt()+1){true}
visit = BooleanArray(numbers.length){false}
isPrime[0] = false
isPrime[1] = false
isPrime[2] = true
for(i in 2..max.toInt()){
if(!isPrime[i]) continue
var j = i*2
while(j<=max.toInt()){
isPrime[j] = false
j += i
}
}
dfs(0,numbers)
return cnt
}
fun dfs(depth : Int, numbers: String){
if(sb.length!=0){
if(isPrime[sb.toString().toInt()]&&!primeSet.contains(sb.toString().toInt())){
cnt++
primeSet.add(sb.toString().toInt())
}
}
if(depth==numbers.length){
return
}
for(i in 0 until numbers.length){
if(!visit[i]){
sb.append(numbers[i])
visit[i] = true
dfs(depth+1,numbers)
visit[i] = false
sb.deleteCharAt(depth)
}
}
}
}
Author And Source
이 문제에 관하여(프로그래머스 Lv2 소수찾기 Kotlin), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jihoon97/프로그래머스-Lv2-소수찾기-Kotlin저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)