-
[프로그래머스][Kotlin]소수 찾기프로그래머스 2023. 3. 30. 12:57728x90
해당 문제는 입력받은 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) '프로그래머스' 카테고리의 다른 글
[프로그래머스][Kotlin] 추억 점수 (0) 2023.04.03 [프로그래머스][Kotlin] 2020 카카오 인턴십 보석 쇼핑 (0) 2023.04.02 [프로그래머스][Kotlin] 공원 산책 (0) 2023.03.23 [프로그래머스][Kotlin] 리코쳇 로봇 (0) 2023.03.23 [프로그래머스][Kotlin] 베스트앨범 (0) 2023.03.21