티스토리 뷰

소수 만들기

문제 설명

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

 

제한사항

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

 

문제 풀이

2가지를 알아야 했다.

  1. 배열에서 3가지 항목을 뽑아내기 (순열의 축소판)
  2. 소수를 구하는 알고리즘

 

 

 

 

 

배열에서 3가지 항목을 뽑아내는 것은 가장 기본적인 방법을 사용했다.

 

소수를 구하는 알고리즘 중에 가장 유명하고 빠른 것을 사용했다.

N 에 대해 (루트 N) 보다 작은 수로 나눠지면 N은 소수가 아니다.

여기서 1은 제외해야한다. 1을 제외 안해서 오류가 났다.

루트를 하기 위해 sqrt를 사용했다. sqrt는 Double을 지원하므로 캐스팅하는 것을 잊으면 안된다.

 

 

코드

import Foundation

func solution(_ nums:[Int]) -> Int {
    
    var answer = 0
    var numsCount = nums.count
    var sumOfElements = 0
    var divisor = 0
    var isPrime = true
    
    for i in 0..<numsCount {
        for j in i+1..<numsCount {
            for k in j+1..<numsCount {
                
                sumOfElements = nums[i] + nums[j] + nums[k]
                divisor = Int(sqrt(Double(sumOfElements)))
                
                for num in 2...divisor {
                    if(sumOfElements % num == 0){
                        isPrime = false
                        break
                    }
                    isPrime = true
                }   
                answer = isPrime ? answer + 1 : answer        
            }
        }
    }
    return answer
}

 

 

 

 

후기

for 루프를 작성하면서 0...divisor 로 작성했는데, 0으로 나누기를 시도하게 되어 오류가 발생했었다.

항상 for 루프를 작성할 때는 범위를 신경써야 한다.

 

소수 확인 알고리즘을 몰라 구글링을 했다.

아직 코딩테스트 연습을 한 지 얼마안되서 미숙한 거 같다.

익숙해질 때 까지 연습을 해야겠다.

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함