주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요.
입력이 배열로 주어지는 문제 특성 상, 세 가지 수를 뽑는 모든 경우의 수를 탐색하기 위해서 반복문을 세 번 중첩해서 작성했다. 세 가지 수를 뽑은 후에는 모든 수를 더한 수가 소수인지 판별하고, 결과를 Bool
변수로 판단했다. 소수인지 판별되면, 적절한 변수에 그 횟수를 카운팅해서 출력하면 되는 문제.
아래는 내가 풀어낸 코드이다.
import Foundation
func solution(_ nums:[Int]) -> Int {
var answer = 0, temp = 0, isPrime = false
for i in 0...nums.count-3 {
for j in i+1...nums.count-2 {
for k in j+1...nums.count-1 {
temp = nums[i] + nums[j] + nums[k]
for x in 2..<temp {
if temp % x == 0 {
isPrime = false
break
} else { isPrime = true }
}
answer = isPrime ? answer + 1 : answer
}
}
}
return answer
}
그렇게 어렵지는 않지만, 이 문제를 풀면서 느낀 점이 하나가 있는데...
코드를 작성하기 전에, 글로 해당 코드의 로직을 정리하면 한결 수월하게 문제를 해결할 수 있다.
반복문이 중첩되는 횟수가 늘어날 수록, 머리 속에서만 로직을 정리하는 데에는 한계가 있는 것 같아서 다음부터는 종이든 뭐든 간에 손으로 끄적이면서 풀어보도록 해야겠다고 느꼈다!