[프로그래머스] 소수찾기 - (완전탐색) c++

ha·2022년 1월 18일
0

프로그래머스

목록 보기
14/21

한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다.

각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요.

string a = "0123456";
1. cout<<a.substr(2);
출력: 23456
2. cout<<a.substr(2,2);
출력: 23

next_permutation은 단순히 인자로 넘어왔을 때의 상황만 보고, 다음 순서에 해당하는 순열을 반환해주기 때문에 정렬되지 않은 container를 조작할 때에는 모둔 순열을 반환받을 수 없습니다.

int solution(string numbers) {
    
    // 중복 방지를 위한 집합 자료구조 
    unordered_set<int> answer;
    int temp=0;
    sort(numbers.begin(),numbers.end());
    do {
        for (int i=1; i<numbers.size()+1; i++){
            
            // 가능한 숫자의 조합을 모두 만들기위해 substr로 숫자의 길이를 변형
            temp = stoi(numbers.substr(0, i));
            if (isPrime(temp))
                answer.insert(temp);
        }
    // next permutation 함수를 이용해 numbers의 값들을 다음 순열로 바꿈
    } while(next_permutation(numbers.begin(), numbers.end()));
    
    return answer.size();

0개의 댓글