알고리즘/프로그래머스

프로그래머스 level2 - 소수 찾기

https://programmers.co.kr/learn/courses/30/lessons/42839?language=cpp

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 


풀이방법

  • sort로 최대값 구하기
  • 최대값까지 소수 찾기
  • 찾은 소수를 string으로 바꿔 numbers에 포함되면 answer증가
#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;
int answer =0;
int numSize = 0;
bool cmp(char a, char b) {
    return a > b;
}
void isCheck(int pri, string numbers) {
    string p = to_string(pri);
    vector<bool> visit(numSize);
    for (int i = 0; i < p.size(); i++) {
        bool flag = false;
        for (int j = 0; j < numbers.size(); j++) {
            if (visit[j] == false && p[i]==numbers[j]) {
                flag = true;
                visit[j] = true;
                break;
            }
        }
        if (!flag) {
            return;
        }
    }
    answer++;
    return; 
}
void isPrime(string numbers) {
    vector<bool> tmp(stoi(numbers)+1, false);
    for (int i = 2; i <= stoi(numbers); i++) {
        if (tmp[i]) continue;
        isCheck(i,numbers);//포함하는지 확인
        for (int j = i; j <=stoi(numbers); j += i) {
            tmp[j] = true;
        }
    }
    return;
}
int solution(string numbers) {
    numSize = numbers.size();
    sort(numbers.begin(), numbers.end(), cmp);
    isPrime(numbers);
    return answer;
}
int main() {
    string numbers = "011";
    cout<<solution(numbers);
}