경험의 기록

문제 : https://programmers.co.kr/learn/courses/30/lessons/42839 

 

코딩테스트 연습 - 소수 찾기

한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다. 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이

programmers.co.kr

 

 

class Solution {
    val arr = arrayListOf<String>()
    val numberArr = mutableSetOf<Int>()
    
    fun solution(numbers: String): Int {
        var answer = 0
        
        // 전체 수 조합 구하기
        for(i in 0 until arr.size){
            val visit = Array<Int>(100){0}
            visit[i] = 1
            find(visit,numbers[i].toString(),numbers.length,1)
        }
        
        // 소수 판별
        for(i in numberArr){
            var count = 0
            for(j in 2 .. i){
                if(i%j == 0) count++
            }
            if(count==1){
                answer++
            }
        }
        
        return answer
    }
    
    fun find(visit: Array<Int>, str: String, size: Int, count: Int){
        // 탐색 할 때마다 결과값 add
        numberArr.add(str.toInt())
        
        // 최대 길이일 때 리턴
        if(count == size){
            return
        }
        
        // DFS
        for(j in 0 until size){
            if(visit[j] == 0){
                visit[j] = 1
                find(visit,str+arr[j],size,count+1)
                visit[j] = 0
            }
        }
    }
}

만들 수 있는 모든 조합을 구한 후, Int형태로 저장하여 011등의 0값을 제거하고, Set에 넣어 중복값을 제거하여 그 값들 사이의 소수를 구하였다.

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading