Programmers[소수찾기]
문제
내 생각
완전탐색의 전형적인 유형이다.
전부 다 해보고 그 중 되는 것들의 갯수를 세어 결과를 반환하는 방법으로 코드를 작성했다.
깨달은 점
BooleanArray를 사용한 checking 되는 방법은 잊지않고 상기시켜야 할 거 같다.
재귀 공부는 꾸준히...재귀 공부는 꾸준히...재귀 공부는 꾸준히...
또한 소수 판별을 할 때 Count 변수로 세면 시간초과가 뜬다. 나눠지는 수가 존재했을 때 false가 반환되는 함수 형태로 고쳐서 했더니 바로 문제를 해결할 수 있었다.
코드
class Problem2 {
private val numberSet = mutableSetOf<Int>()
lateinit var tempNumbers: String
lateinit var check: BooleanArray
fun solve(numbers: String): Int {
var answer = 0
tempNumbers = numbers
check = BooleanArray(tempNumbers.length)
func(0, "")
answer = numberSet.size
return answer
}
fun func(depth: Int, strNum: String) {
if (depth == tempNumbers.length) {
var counter = 0
if (strNum == "") return
val number = strNum.toInt()
if (number == 0) return
if (number == 1) return
if(isPrime(number)){
numberSet.add(number)
}
return
}
for (i in tempNumbers.indices) {
if (!check[i]) {
check[i] = true
func(depth + 1, strNum + tempNumbers[i])
check[i] = false
func(depth + 1, strNum)
}
}
}
fun isPrime(number : Int) : Boolean{
for(i in 2 until number){
if(number % i == 0) return false
}
if(number <= 1) return false
return true
}
}
Author And Source
이 문제에 관하여(Programmers[소수찾기]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@willow_ryu/Programmers소수찾기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)