본문 바로가기
알고리즘 문제풀이

[프로그래머스] #137 소수 만들기 (Swift)

by SiO2whocode 2022. 2. 16.
728x90

https://programmers.co.kr/learn/courses/30/lessons/12977?language=swift 

 

코딩테스트 연습 - 소수 만들기

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

programmers.co.kr

구현 (조합) level 1

자연수를 담은 배열이 주어지고 그 중 3개의 값을 더해 소수인지 아닌지 판별 -> 더해서 소수인 개수를 반환하는 문제

 

소수 판별 + 조합 문제 이다.

 

접근방법

소수판별에는 에라토스테네스의 체를 사용하여 시간적 효율을 높이 구할 수도 있고, 제곱근을 사용하여 범위를 줄여 검사할 수도 있지만

수의 범위가 작아서, 그냥 n보다 작은수까지를 모두 검사했다.

 

그리고 조합도 백트래킹을 사용하여 할 수 있었겠지만 (swift에는 조합에 관한 라이브러리가 없다 내가 만들어야하나)

딱 3개여서 그냥 반복문을 중첩하기로 했다. 3중 포문

 

의문점

이 문제를 풀면서 정말 동일해보이는 코드인데 어떤건 core dump 에러가 나버렸다. 띄어쓰기나 변수명을 바꾸면 통과되길래 그 이유인가 했더니 다시 변경사항을 없애서 돌려봐도 돌아가서 정확한 이유를 못찾았다..; 어쨌든 이건 돌아가는 코드.

 

소스코드

import Foundation

func isPrime(_ num: Int) -> Bool {
    for d in 2..<num {
        if num % d == 0 { return false }
    }
    return true
}

func solution(_ nums:[Int]) -> Int {
    var answer = 0

    for i in 0...nums.count - 3 {
        for ii in i+1...nums.count - 2 {
            for iii in ii+1...nums.count - 1 {
                let sum: Int = nums[i] + nums[ii] + nums[iii]
                if isPrime(sum) { answer += 1 }
            }
        }
    }

    return answer

}

728x90