Programmers[レベル2]小数点を検索


小数点を検索


  • 問題の説明


  • せいげんじょうけん


  • I/O例


  • I/O例説明

  • コード#コード#

    #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;
    }
    
  • 学習点
  • このコードはsetを使用して重複値を除去しますが、setは使用しません. vec.erase(unique(vec.begin(), vec.end()), vec.end());