[Programmers] [Lv.1] [Swift] 소수 만들기

doyeonjeong_·2022년 8월 20일
0

프로그래머스

목록 보기
34/35
post-thumbnail

문제

소수 만들기

문제파악하기

  • sum이라는 배열을 만들어 3개의 숫자 합을 전부 담아준다.
  • 세개의 합을 구하기 위해 반복문 끝을 배열 길이 -2로 설정한다.
  • i보다 한칸 뒤의 위치를 j, 그 뒤를 k로 설정하여 sum.append()
  • isPrime 함수를 통해 소수인 것만 배열에 담아 .count를 반환한다.

풀이

func solution(_ nums:[Int]) -> Int {
    var sum = [Int]()
    
    for i in 0 ..< nums.count - 2 {
        for j in i+1 ..< nums.count {
            for k in j+1 ..< nums.count {
                sum.append(nums[i] + nums[j] + nums[k])
            }
        }
    }
    return sum.filter{isPrime($0)}.count
}

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

🤔 FEEDBACK

  • 소수 만들기 문제는 풀때마다 리셋되는 기분이다.
  • 풀이 방법도 다양하기 때문에 이틀에 한번씩 복습하면서 다른 풀이를 연습해보는게 좋을 것 같다.

다른 풀이

func solution(_ nums:[Int]) -> Int {
    var answer: Int = 0
    var combi: [Int] = [Int](repeating: 0, count: 3)
    combination(nums, &combi, 0, nums.count, 0, 3, &answer)

    return answer
}

func checkPrime(_ num: Int) -> Bool {
    var index: Int = 0
    for i in 2...num {
        if num % i == 0 {
            index = i
            break
        }
    }
    if index == num {
        return true
    }
    return false
}

func combination(_ nums: [Int], _ combi: inout [Int], _ target: Int,
                 _ n: Int, _ index: Int, _ k: Int, _ answer: inout Int)
{
    if k == 0 {
        var checkNum: Int = 0
        for i in combi {
            checkNum += nums[i]
        }
        // 소수이면 1 더함
        if checkPrime(checkNum) {
            answer += 1
        }
    }
    else if target == n {
        return
    }
    else {
        combi[index] = target
        combination(nums, &combi, target + 1, n, index + 1, k - 1, &answer)
        combination(nums, &combi, target + 1, n, index, k, &answer)
    }
}
profile
블로그 이사중 🚚 byukbyak.tistory.com

0개의 댓글