[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์†Œ์ˆ˜ ์ฐพ๊ธฐ (C++)

2023. 10. 23. 16:43ยท์•Œ๊ณ ๋ฆฌ์ฆ˜/Programmers
728x90

1. ๋ฌธ์ œ

 

ํ•œ์ž๋ฆฌ ์ˆซ์ž๊ฐ€ ์ ํžŒ ์ข…์ด ์กฐ๊ฐ์ด ํฉ์–ด์ ธ์žˆ์Šต๋‹ˆ๋‹ค.

ํฉ์–ด์ง„ ์ข…์ด ์กฐ๊ฐ์„ ๋ถ™์—ฌ ์†Œ์ˆ˜๋ฅผ ๋ช‡ ๊ฐœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ์•„๋‚ด๋ ค ํ•ฉ๋‹ˆ๋‹ค.
๊ฐ ์ข…์ด ์กฐ๊ฐ์— ์ ํžŒ ์ˆซ์ž๊ฐ€ ์ ํžŒ ๋ฌธ์ž์—ด numbers๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ข…์ด ์กฐ๊ฐ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์†Œ์ˆ˜๊ฐ€ ๋ช‡ ๊ฐœ์ธ์ง€ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

 

2. ์ฝ”๋“œ

#include <string>
#include <vector>
#include <cmath>
#include <algorithm>
using namespace std;

int solution(string numbers) {
    int answer=0;
    
    //next_permutation์„ ์‚ฌ์šฉ
    //์ˆœ์—ด ๊ณ„์‚ฐ์—์„œ 1์ž๋ฆฌ,2์ž๋ฆฌ ~ n์ž๋ฆฌ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜ ๊ตฌํ•˜๊ธฐ
    sort(numbers.begin(),numbers.end());
    vector<unsigned int> nums;
    string sub;
    do {
        for (int i = 1; i <=  numbers.size(); i++)
        {
            sub = numbers.substr(0, i);
            nums.push_back(stoi(sub));
        }
    } while (next_permutation(numbers.begin(), numbers.end()));
    
    //์ค‘๋ณต๋œ ์ˆซ์ž ์ œ๊ฑฐํ•˜๊ธฐ
    sort(nums.begin(), nums.end());
    nums.erase(unique(nums.begin(),nums.end()), nums.end());
    
    //์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์ฒด ๊ตฌํ•˜๊ธฐ
    unsigned int nn=9999999;
    vector<bool> isPrimeNum(nn+1);
    isPrimeNum[1] = true; // 1์€ ์†Œ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ true
    for(unsigned int i = 2; i <= sqrt(nn); i++){
        if(isPrimeNum[i]) continue; // ์ด๋ฏธ true๋ฉด ๊ณ„์‚ฐ ์ œ์™ธ
        for(unsigned int j = i + i; j <= nn; j += i) // i๋ฅผ ์ œ์™ธํ•œ i์˜ ๋ฐฐ์ˆ˜๋“ค์€ ์†Œ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋‹ค.
            isPrimeNum[j] = true;
    }

    for(int i=0;i<nums.size();i++){
	    if(!isPrimeNum[nums[i]]&nums[i]>0)      //0์ธ ๊ฒฝ์šฐ ์ œ์™ธ
            answer++;
    }
    
    return answer;
}

 

3. ํ•ด์„ค

    //next_permutation์„ ์‚ฌ์šฉ
    //์ˆœ์—ด ๊ณ„์‚ฐ์—์„œ 1์ž๋ฆฌ,2์ž๋ฆฌ ~ n์ž๋ฆฌ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜ ๊ตฌํ•˜๊ธฐ
    sort(numbers.begin(),numbers.end());
    vector<unsigned int> nums;
    string sub;
    do {
        for (int i = 1; i <=  numbers.size(); i++)
        {
            sub = numbers.substr(0, i);
            nums.push_back(stoi(sub));
        }
    } while (next_permutation(numbers.begin(), numbers.end()));

๋จผ์ € ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด์„œ string์„ ์ •๋ ฌํ•ด์ฃผ๊ณ , next_permutation ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด 1~n์ž๋ฆฌ์˜ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•ฉ๋‹ˆ๋‹ค.

    //์ค‘๋ณต๋œ ์ˆซ์ž ์ œ๊ฑฐํ•˜๊ธฐ
    sort(nums.begin(), nums.end());
    nums.erase(unique(nums.begin(),nums.end()), nums.end());

๊ทธ ํ›„, ์ค‘๋ณต ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์ค‘๋ณต๋œ ์ˆซ์ž๋ฅผ ์ œ๊ฑฐํ•ด์ค๋‹ˆ๋‹ค.

    //์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์ฒด ๊ตฌํ•˜๊ธฐ
    unsigned int nn=9999999;
    vector<bool> isPrimeNum(nn+1);
    isPrimeNum[1] = true; // 1์€ ์†Œ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ true
    for(unsigned int i = 2; i <= sqrt(nn); i++){
        if(isPrimeNum[i]) continue; // ์ด๋ฏธ true๋ฉด ๊ณ„์‚ฐ ์ œ์™ธ
        for(unsigned int j = i + i; j <= nn; j += i) // i๋ฅผ ์ œ์™ธํ•œ i์˜ ๋ฐฐ์ˆ˜๋“ค์€ ์†Œ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋‹ค.
            isPrimeNum[j] = true;
    }

์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์ฒด์˜ ํ•ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•˜์—ฌ ์ฃผ์–ด์ง„ ๋ฒ”์œ„ ๋‚ด์—์„œ ์†Œ์ˆ˜๊ฐ€ ์•„๋‹Œ ๊ฐ’๋“ค์„ true๋กœ ํ‘œ์‹œํ•ด์ค๋‹ˆ๋‹ค.

    for(int i=0;i<nums.size();i++){
	    if(!isPrimeNum[nums[i]]&nums[i]>0)      //0์ธ ๊ฒฝ์šฐ ์ œ์™ธ
            answer++;
    }

์†Œ์ˆ˜ ํŒ๋ณ„ vector isPrimeNum์„ ๊ฐ€์ง€๊ณ  ๊ฒฝ์šฐ์˜ ์ˆ˜๋“ค์˜ ๋ฆฌ์ŠคํŠธ nums์˜ ๊ฐ’๊ณผ ๋น„๊ตํ•˜์—ฌ ๋งŒ์•ฝ ์†Œ์ˆ˜๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ(false) answer์„ ํ•œ๊ฐœ ๋Š˜๋ ค์ค๋‹ˆ๋‹ค.

๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ 0์ธ๊ฒฝ์šฐ๋Š” ์†Œ์ˆ˜๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋–„๋ฌธ์— ์ œ์™ธํ•ฉ๋‹ˆ๋‹ค.

 

 

 

๋ฐ˜์‘ํ˜•

'์•Œ๊ณ ๋ฆฌ์ฆ˜ > Programmers' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์ฒด์œก๋ณต  (1) 2023.11.15
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋ชจ์Œ์‚ฌ์ „ C++  (1) 2023.11.07
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์ „๋ ฅ๋ง์„ ๋‘˜๋กœ ๋‚˜๋ˆ„๊ธฐ C++  (0) 2023.10.30
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ํ”ผ๋กœ๋„ C++  (0) 2023.10.26
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์นดํŽซ  (1) 2023.10.26
'์•Œ๊ณ ๋ฆฌ์ฆ˜/Programmers' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋ชจ์Œ์‚ฌ์ „ C++
  • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์ „๋ ฅ๋ง์„ ๋‘˜๋กœ ๋‚˜๋ˆ„๊ธฐ C++
  • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ํ”ผ๋กœ๋„ C++
  • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์นดํŽซ
KiTFOx
KiTFOx
  • KiTFOx
    KiTFOx's Notepad ๐Ÿ“
    KiTFOx
  • ๊ณต์ง€์‚ฌํ•ญ

    • ๐Ÿ“ข KiTFOx
  • 250x250
    • KiTFOx (118)
      • ๊ณต๋ถ€ (8)
        • Cใ†C++ (7)
        • Design Pattern (2)
        • Crowd Simulation (2)
        • LearnOpenGL ๋ฒˆ์—ญ (3)
        • OpenGL ์ž๋ฃŒ ๋ฒˆ์—ญ (2)
        • OpenGL (1)
        • UE ์ž๋ฃŒ ๋ฒˆ์—ญ (1)
        • AR (0)
        • OpenCV (0)
      • ์•Œ๊ณ ๋ฆฌ์ฆ˜ (50)
        • ์ž๋ฃŒ๊ตฌ์กฐ (3)
        • BaekJoon (35)
        • Programmers (11)
      • OpenGL ๋”ฐ๋ผ๊ฐ€๊ธฐ (2)
      • ๊ฒŒ์ž„์—”์ง„ (15)
        • Unity (13)
        • UE4 (0)
        • UE5 (2)
      • ๋ฉ”ํƒ€๋ฒ„์Šค (4)
        • Engage VR (3)
        • Altspace VR (1)
      • ํฌํŠธํด๋ฆฌ์˜ค ํ”„๋กœ์ ํŠธ (2)
        • NewRo (1)
        • Amaimon(Unity3D) (0)
        • ArenaSurvival(UE5) (0)
      • ๊ฐœ๋ฐœ์ผ์ง€ (1)
        • Pub-Simulator (1)
        • Project-B (0)
      • ๋„คํŠธ์›Œํฌ (4)
      • Etc Study (5)
      • ๋Œ€์™ธํ™œ๋™ (8)
        • ํฌ๋ž˜ํ”„ํ†ค ์ •๊ธ€ ๊ฒŒ์ž„๋žฉ (6)
      • ํšŒ๊ณ ๋ก (0)
      • ๊ฒŒ์ž„ ํ•œ๊ธ€ํŒจ์น˜ (0)
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
KiTFOx
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์†Œ์ˆ˜ ์ฐพ๊ธฐ (C++)
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”