프로그래머스
[프로그래머스][Kotlin]소수 찾기
끝까지 처음처럼
2023. 3. 30. 12:57
728x90
해당 문제는 입력받은 numbers의 숫자를 조합하여 만들 수 있는 숫자들 중 소수인 숫자들의 개수를 반환하는 문제입니다.
저는 numbers를 내림차순으로 정렬했을 경우 가장 큰 수가 나오는 점을 이용하여 가장 큰 수만큼의 사이즈를 가진 배열을 생성 후 유클리드 호제법을 이용하여 소수인지 구분하는 배열을 미리 만들어 놓은 다음 numbers를 완전 탐색하며, 현재 조합 된 숫자가 소수인지 확인 후 소수가 맞다면 list에 저장한 후 최종적으로는 list의 사이즈를 반환하는 형식으로 코드를 작성하였습니다.
하기는 작성한 코드와 실행 결과 입니다.
class Solution {
var list = ArrayList<Int>()
var number : Int = 0
var numbers = ""
lateinit var visit : BooleanArray
lateinit var check : IntArray
fun solution(numbers: String): Int {
number = numbers.toCharArray().sortedDescending().joinToString("").toInt()
visit = BooleanArray(numbers.length){true}
this.numbers = numbers
check = IntArray(number+1){i: Int -> i}
for(i in 2 .. Math.sqrt(check.size.toDouble()).toInt()){
var start = i
if(check[start] == 0) continue
while(start+i < check.size){
start+=i
check[start] = 0
}
}
for(i in 0 .. numbers.length-1){
visit[i] = false
join(numbers[i].toString())
visit[i] = true
}
return list.distinct().size
}
fun join(s:String){
if(check[s.toInt()] != 0 && s.toInt() != 1){
list.add(s.toInt())
}
for(i in 0 .. numbers.length-1){
if(visit[i]){
visit[i] = false
join(s+numbers[i].toString())
visit[i] = true
}
}
}
}
테스트 1 〉 | 통과 (39.16ms, 65.3MB) |
테스트 2 〉 | 통과 (69.43ms, 68.6MB) |
테스트 3 〉 | 통과 (44.86ms, 65.8MB) |
테스트 4 〉 | 통과 (66.01ms, 66.9MB) |
테스트 5 〉 | 통과 (119.69ms, 83.4MB) |
테스트 6 〉 | 통과 (41.04ms, 65.5MB) |
테스트 7 〉 | 통과 (36.66ms, 64.7MB) |
테스트 8 〉 | 통과 (146.58ms, 94MB) |
테스트 9 〉 | 통과 (41.21ms, 65.3MB) |
테스트 10 〉 | 통과 (75.18ms, 69.5MB) |
테스트 11 〉 | 통과 (46.04ms, 65.5MB) |
테스트 12 〉 | 통과 (51.99ms, 65.9MB) |