Programmers[level 2] 소수찾기

소수 찾기

  • 문제 설명

  • 제한 사항

  • 입출력 예

  • 입출력 예 설명

코드

#include <string>
#include <vector>
#include <cmath>
#include <algorithm>
#include <set>

using namespace std;

bool isPrime(int a) {
    if (a == 0 || a == 1)return false;
    for (int i = 2; i <= sqrt(a); i++) {
        if (a % i == 0) return false;
    }
    return true;
}

int solution(string numbers) {
    int answer = 0;
    vector<int> vec;
    set<int> b;
    
    for (int i = 0; i < numbers.length(); i++) {//numbers 각 자리를 숫자로 분할
        vec.push_back(numbers[i] - '0');
    }
    sort(vec.begin(), vec.end());
   
    do {
    // 순열을 돌리면서 index[0], index[0:1]~~index[0:7]이 소수이면 set에 추가, 
    // 이를 모든 순열에 적용.
        int num = 0;
        for (int i = 0; i < numbers.length(); i++) {
            num += vec[i];
            if (isPrime(num)) b.insert(num);
            num *= 10;![](https://media.vlpt.us/images/98jihyun/post/dfca4382-8869-4c5a-9768-6c57173c5827/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-07-27%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%205.36.26.png)![](https://media.vlpt.us/images/98jihyun/post/3c8bdb1d-ec64-495b-b8b1-7f6b36018f04/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-07-27%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%205.36.41.png)
        }
    } while (next_permutation(vec.begin(), vec.end()));
    answer = b.size();
    return answer;
}
  • 배운점
  1. 본 코드에서는 중복값을 제거하기 위해서 set를 사용했지만, set 대신에
    vec.erase(unique(vec.begin(), vec.end()), vec.end());

좋은 웹페이지 즐겨찾기