Programming/Programmers

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

fishersheep 2022. 3. 23. 15:59
반응형
#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
#include <set>

using namespace std;


int solution(string numbers) {
    int answer = 0;
    int temp;
    set<int>s;  //set을 사용하여 중복되는 숫자방지

    for (int i = 0; i < numbers.size(); i++)    //numbers에서 한자리 수 이면서 소수인것을 찾는 반복문
    {
        vector<int>v;
        int n;
        temp = numbers[i] - '0';    //정수로 변환

        if (temp == 0)continue; //0,1일 경우 continue
        if (temp == 1)continue;
       
        for (int i = 2; i <= temp; i++)
        {
            if (temp % i == 0)  //2부터 temp값사이에서 나머지가 0일 경우, 반복문 종료
            {
                n = i;
                break;
            }
        }
        if (temp == n)  //나머지가 0이 되는 수가 temp값과 같다면 소수
            s.insert(n);    //set에 insert
        

    }

    sort(numbers.begin(), numbers.end());   //next_permutation을 하기전에 오름차순으로 정렬

    do
    {
        vector<int>v2;
        string str;
        v2.push_back(stoi(numbers));    //최대자리수인 값 v2에 push

        for (int i = 2; i < numbers.size(); i++)
        {
            str = numbers.substr(1, i); //각 자릿수를 별로 확인하기위해서 문자열 자르기
            temp = stoi(str);           //ex)입력값이 1234일 경우, 1234의 순열뿐만아니라 23,234와 같은 수 역시 확인해야하기때문에
            v2.push_back(temp);
        }

        for (int k = 0; k < v2.size(); k++) //v2에 저장된 각 수들이 소수인지 확인하는 반복문
        {
            temp = v2[k];
            int num;

            for (int i = 2; i <= temp; i++)
            {
                if (temp % i == 0)
                {
                    num = i;
                    break;
                }
            }

            if (temp == num)
                s.insert(num);
            
        }

    } while (next_permutation(numbers.begin(), numbers.end()));


    answer = s.size();  //set의 size가 소수의 개수

    return answer;
}

 

후기

처음에 풀었을때 맞는것 같은데 계속 틀려서 소수를 구하는 방식이 잘못된줄알고 계속 그부분만 수정했다. 그래도 해결이 안되서 다른 테스트케이스를 돌려보던 중 자릿수가 1일 경우와 최대인경우만 확인하고 다른 자릿수를 확인하지 않았다는 것을 깨달았다. 앞으로 문제를 풀때 구해야할 정답을 좀더 차근차근 생각해야겠다.  

반응형