ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [프로그래머스][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)

     

Designed by Tistory.