[프로그래머스 / C++] 소수찾기

Taegang Yun·2023년 9월 7일
1

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

#include <string>
#include <vector>
#include <set>



using namespace std;

set<int> numberSet;
int isPrime(int number)
{
    if (number == 1) return 0;
    if (number == 2) return 1;
    if (number % 2 == 0) return 0;
    for(int i = 3; i*i <= number; i++)
    {
        if (number % i == 0) return 0;
    }
    return 1;
}

void Combi(string comb, string others)
{
    if (comb != "")
        numberSet.insert(stoi(comb));

    for (int i = 0; i < others.size(); i++)
        Combi(comb + others[i], others.substr(0, i) + others.substr(i + 1));
}

int solution(string numbers) {
    Combi("", numbers);

    int answer = 0;
    for (int number : numberSet)
        if (isPrime(number))
            answer++;
    
    return answer;
}

소수 찾는 거는 예전 강의에서 한 번 배웠어서
에라토스테네스의 채 방법으로 저걸 그냥 외워버려서 썼다

콤비네이션 코드를 두 개 외워났는데

void combi(int start, vector<int> b){
	if(b.size() == k){
		/*  길이가 k인것에 대한 행동 */
		return;
	}
	for(int i = start + 1; i < n; i++){
		b.push_back(i);
		combi(i, b);
		b.pop_back();
	}
}

요거랑

void Combi(string comb, string others)
{
    if (comb != "")
        numberSet.insert(stoi(comb));

    for (int i = 0; i < others.size(); i++)
        Combi(comb + others[i], others.substr(0, i) + others.substr(i + 1));
}

요거를 외워놨다

아무튼 너 콤비네이션 할 줄 알아? 하는 문제였던 것 같다

1트!

profile
언젠간 전문가가 되겠지

0개의 댓글

관련 채용 정보