본문 바로가기

Algorithm

프로그래머스 lv2 소수 찾기

반응형

문제 설명

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

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

제한사항

  • numbers는 길이 1 이상 7 이하인 문자열입니다.
  • numbers는 0~9까지 숫자만으로 이루어져 있습니다.
  • 013은 0, 1, 3 숫자가 적힌 종이 조각이 흩어져있다는 의미입니다.

입출력 예

numbersreturn

17 3
011 2

입출력 예 설명

예제 #1
[1, 7]으로는 소수 [7, 17, 71]를 만들 수 있습니다.

예제 #2
[0, 1, 1]으로는 소수 [11, 101]를 만들 수 있습니다.

  • 11과 011은 같은 숫자로 취급합니다.
#include <string>
#include <vector>
#include <map>
#include<iostream>
using namespace std;
string res = "";
string number;
bool visit[7];
map<int,bool> m;
int ans;
void DFS()
{
    int num = stoi(res);
    bool flag = true;
    if(num != 1 && num != 0 && !m[num])
    {
        m[num] = true;
        for(int i = 2; i < num; i++)
        {
            if(!(num % i))
            {
                flag = false;
                break;
             }
        }
        if(flag)
            ans++;
    }
    
   
    
   
    
    for(int i = 0; i < number.size(); i++)
    {
        if(!visit[i])
        {
            res += number[i];
            visit[i] = true;
            DFS();
            visit[i] = false;
            res.pop_back();
        }
    }
}

int solution(string numbers) {
    number = numbers;
    for(int i = 0; i < numbers.size(); i++)
    {
        res += numbers[i];
        visit[i] = true;
        DFS();
        visit[i] = false;
        res.pop_back();
    }
    return ans;
}
반응형

'Algorithm' 카테고리의 다른 글

프로그래머스 lv2 가장 큰 수  (0) 2020.10.23
프로그래머스 lv2 카펫  (0) 2020.10.23
프로그래머스 lv3 순위  (0) 2020.10.23
프로그래머스 lv3 입국심사  (0) 2020.10.22
프로그래머스 lv3 등굣길  (0) 2020.10.22