문제

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

제한사항

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

풀이

입력이 배열로 주어지는 문제 특성 상, 세 가지 수를 뽑는 모든 경우의 수를 탐색하기 위해서 반복문을 세 번 중첩해서 작성했다. 세 가지 수를 뽑은 후에는 모든 수를 더한 수가 소수인지 판별하고, 결과를 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
}

회고

그렇게 어렵지는 않지만, 이 문제를 풀면서 느낀 점이 하나가 있는데...

코드를 작성하기 전에, 글로 해당 코드의 로직을 정리하면 한결 수월하게 문제를 해결할 수 있다.

반복문이 중첩되는 횟수가 늘어날 수록, 머리 속에서만 로직을 정리하는 데에는 한계가 있는 것 같아서 다음부터는 종이든 뭐든 간에 손으로 끄적이면서 풀어보도록 해야겠다고 느꼈다!

profile
iOS 개발자가 되고 싶어요

0개의 댓글