코딩테스트

C# 알고리즘 - 소수 만들기

작성자 정보

  • 마스터 작성
  • 작성일

컨텐츠 정보

본문

[문제 설명]

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

 

[제한사항]

nums에 들어있는 숫자의 개수는 3개 이상 50개 이하입니다.

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

 

[입출력 예]

 

[입출력 예 설명]

입출력 예 #1

[1,2,4]를 이용해서 7을 만들 수 있습니다.


입출력 예 #2

[1,2,4]를 이용해서 7을 만들 수 있습니다.

[1,4,6]을 이용해서 11을 만들 수 있습니다.

[2,4,7]을 이용해서 13을 만들 수 있습니다.

[4,6,7]을 이용해서 17을 만들 수 있습니다.

 

[코드] 

using System;


class Solution

{

    public int solution(int[] nums)

    {

        int answer = 0;


        for(int i =0; i<nums.Length; i++)

        {

            for(int j=i+1; j< nums.Length -1 ; j++)

            {

                for(int k=j+1; k<nums.Length; ++k)

                {

                    int sum = nums[i] + nums[j] + nums[k];

                    if(CheckDecimal(sum)) answer++;

                }

            }

        }


        return answer;

    }

    

    bool CheckDecimal(int num)

    {

        int check_num = num / 2;

        for(int i=2; i<check_num; i++)

        {

            if(num % i == 0) return false;

        }

        return true;

    }

}

[풀이]

1.소수를 감별하는 메서드 생성

bool CheckDecimal(int num)

{

    int check_num = num / 2;

    for(int i=2; i<check_num; i++)

    {

        if(num % i == 0) return false;

    }

    return true;

}

 

2.for문을 3번 돌리기 (서로다른수 3개를 골라야 하기 때문)

for(int i =0; i<nums.Length; i++)

       

for(int i =0; i<nums.Length; i++){

     for(int j=i+1; j< nums.Length -1 ; j++){

         for(int k=j+1; k<nums.Length; ++k){

        }

   }

}

 

3.더하기

int sum = nums[i] + nums[j] + nums[k];

 

if(CheckDecimal(sum)) answer++;

 

 

[주소]

https://school.programmers.co.kr/learn/courses/30/lessons/12977

해당 알고리즘 문제는 프로그래머스의 알고리즘 문제입니다.

관련자료

댓글 0
등록된 댓글이 없습니다.

최근글


새댓글


알림 0