문제
소수 만들기
문제파악하기
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]
}
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)
}
}