[프로그래머스] 소수만들기

creativeBin·2022년 12월 30일
0

소수 만들기

주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요.

제한사항

nums에 들어있는 숫자의 개수는 3개 이상 50개 이하입니다.
nums의 각 원소는 1 이상 1,000 이하의 자연수이며, 중복된 숫자가 들어있지 않습니다.

입출력 예

numsresult
[1,2,3,4]1
[1,2,7,6,4]4

입출력 예 설명

입출력 예 #1
[1,2,4]를 이용해서 7을 만들 수 있습니다.

입출력 예 #2
[1,2,4]를 이용해서 7을 만들 수 있습니다.
[1,4,6]을 이용해서 11을 만들 수 있습니다.
[2,4,7]을 이용해서 13을 만들 수 있습니다.
[4,6,7]을 이용해서 17을 만들 수 있습니다.

풀이

코테는 왜이렇게 배열이랑 소수 약수 이런거 좋아하는지 나 원참 👿

1) 먼저 지문을 읽어보면
💡주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다
2) 이것또한 3중 for문이겠구나 근데 소수를 체크한다고 하니
3) isPrime이라는 별도의 fuction을 만들어서 Boolean 값을 받도록 한다.
19. 소수찾기 참조

4) loop문에서 ture일 경우에만 answer++
5) 소수찾는 에라토스테네스의 체를 적용한다면 쉽게 가능.

class Solution {
    fun solution(nums: IntArray): Int {

        var answer = 0

        // 3개의 수를 더했을 때        
        for(i in 0 until nums.size) {
            for(j in i+1 until nums.size) {
                for(k in j+1 until nums.size) {                    
                    if(isPrime(nums[i] + nums[j] + nums[k])) answer++
                }
            }
        }                

        return answer

    }

    fun isPrime(n: Int): Boolean {
        var i = 2
        while(i * i <= n) {
            if(n % i++ == 0) return false
        }
        return true
    }

}
profile
언제나 항상 즐겁게 New vibes 😎

0개의 댓글