본문 바로가기

제로부터 C# 코딩테스트

프로그래머스 소수 만들기

728x90

주어진 숫자 배열이 주어지고, 중복되지 않은 숫자 3개를 선택해 소수를 만들때 만들 수 있는 소수의 개수를 구하는 문제.

위 문제에서는 nums의 배열이 50이 최대기 때문에 간단하게 풀 수 있는 문제.

주어진 숫자 3개를 더했을 때 나올 수 있는 가짓수를 구한다면 포문 하나로도 풀 수 있을 것입니다.

보통 조합을 구하는 공식은 nCr로, 0부터 100까지 중복되지 않은 3개의 숫자를 선택하여 더할 때,

C(100, 3) = 100! / (3! * (100-3)!) = 100 * 99 * 98 / (3 * 2 * 1) = 161,700 가지가 나옵니다.

using System;

class Solution
{
    public int solution(int[] nums)
    {
        
        int answer = 0;
      for(int i = 0;i<nums.Length-2;i++){
          for(int j = i+1;j<nums.Length-1;j++){
              for(int k = j+1;k<nums.Length;k++){
                  int sum = 0;
                  sum += nums[i] + nums[j] + nums[k];
                  if(Prime(sum)){
                      answer++;
                  }
              }
          }
      }
        
        return answer;
        
    }
      
       public bool Prime(int num){
        for(int i = 2; i<num;i++){
            if(num%i == 0)
            {
            return false;
            }
        }

           return true;
    }
  
}
728x90