Algorithm/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / C++] ์†Œ์ˆ˜ ์ฐพ๊ธฐ ํ’€์ด

meeeeejin 2020. 7. 30. 12:09

๋ฌธ์ œ

 

<๋ฌธ์ œ ์„ค๋ช…>

 

ํ•œ์ž๋ฆฌ ์ˆซ์ž๊ฐ€ ์ ํžŒ ์ข…์ด ์กฐ๊ฐ์ด ํฉ์–ด์ ธ์žˆ์Šต๋‹ˆ๋‹ค. ํฉ์–ด์ง„ ์ข…์ด ์กฐ๊ฐ์„ ๋ถ™์—ฌ ์†Œ์ˆ˜๋ฅผ ๋ช‡ ๊ฐœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ์•„๋‚ด๋ ค ํ•ฉ๋‹ˆ๋‹ค.

 

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

 

 

<์ œํ•œ์‚ฌํ•ญ>

  • numbers๋Š” ๊ธธ์ด 1 ์ด์ƒ 7 ์ดํ•˜์ธ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.
  • numbers๋Š” 0~9๊นŒ์ง€ ์ˆซ์ž๋งŒ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.
  • 013์€ 0, 1, 3 ์ˆซ์ž๊ฐ€ ์ ํžŒ ์ข…์ด ์กฐ๊ฐ์ด ํฉ์–ด์ ธ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.

 

https://programmers.co.kr/learn/courses/30/lessons/42839

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ์†Œ์ˆ˜ ์ฐพ๊ธฐ

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

programmers.co.kr

 

 

 

๋ฌธ์ œ ํ’€์ด

 

๋‹ค์Œ์˜ ๋ฌธ์ œ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ํ•ด๊ฒฐํ•ด์„œ ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ์Šต๋‹ˆ๋‹ค. 

1. ์ข…์ด ์กฐ๊ฐ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜ ๊ตฌํ•˜๊ธฐ

2. ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜์—์„œ ์ค‘๋ณต๋œ ์ˆ˜ ์ œ๊ฑฐํ•˜๊ธฐ

3. ๋‚จ์€ ์ˆ˜ ์ค‘์—์„œ ์†Œ์ˆ˜ ํŒ๋ณ„ํ•˜๊ธฐ

 

 

1. ์ข…์ด ์กฐ๊ฐ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜ ๊ตฌํ•˜๊ธฐ

๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ข…์ด ์กฐ๊ฐ์˜ ๋ชจ๋“  ์ˆœ์—ด์— ๋Œ€ํ•ด์„œ, 1๋ถ€ํ„ฐ ์ข…์ด ์กฐ๊ฐ์˜ ์ˆ˜๊นŒ์ง€์˜ ์กฐํ•ฉ์„ ๊ตฌํ–ˆ์Šต๋‹ˆ๋‹ค. 

 

ex) numbers = "012"์ธ ๊ฒฝ์šฐ

    ์ˆœ์—ด 1) "012"

         "0", "01", "012" ์ €์žฅ

    ์ˆœ์—ด 2) "021"

         "0", "02", "021" ์ €์žฅ

      .

      .

      .

    ์ˆœ์—ด 6) "210"

         "2", "21", "210" ์ €์žฅ

 

 

 

 

2. ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜์—์„œ ์ค‘๋ณต๋œ ์ˆ˜ ์ œ๊ฑฐํ•˜๊ธฐ

1๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•  ๊ฒฝ์šฐ, "02"์™€ "2"์€ ์‚ฌ์‹ค 2์ด๋ผ๋Š” ๊ฐ™์€ ์ˆ˜์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ vector ๋‚ด์˜ ์ค‘๋ณต์„ ์—†์• ๊ธฐ ์œ„ํ•ด erase์™€ unique๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. 

 

vector<int> v = { 1, 2, 3, 1, 2 };
sort(v.begin(), v.end());	// 11223
unique(v.begin(), v.end());	// 12323

์œ„์™€ ๊ฐ™์ด ์ •๋ ฌ๋œ ๋ฒกํ„ฐ์—์„œ unique๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ์ค‘๋ณต๋˜์ง€ ์•Š์€ ๊ฐ’์„ ์•ž์ชฝ์œผ๋กœ ๋ณด๋‚ด๊ณ , ๋’ค์ชฝ์—๋Š” ์“ฐ๋ ˆ๊ธฐ ๊ฐ’๋“ค์„ ์ €์žฅํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  unique๋Š” ์ œ์ผ ์ฒ˜์Œ ๋‚˜์˜ค๋Š” ์“ฐ๋ ˆ๊ธฐ ๊ฐ’์˜ iterator๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.(์—ฌ๊ธฐ์„  v[3], ์ฆ‰ ๋‘ ๋ฒˆ์งธ ๋‚˜์˜ค๋Š” 2๋ฅผ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค.)

 

v.erase(unique(v.begin(), v.end()), v.end());

๋”ฐ๋ผ์„œ ์œ„์™€ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด, ๋ฒกํ„ฐ์—์„œ ํ•„์š” ์—†๋Š” ๊ฐ’๋“ค์€ ์‚ญ์ œํ•˜๊ณ  ์ค‘๋ณต ์—†๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

 

 

 

3. ๋‚จ์€ ์ˆ˜ ์ค‘์—์„œ ์†Œ์ˆ˜ ํŒ๋ณ„ํ•˜๊ธฐ

์†Œ์ˆ˜๋ฅผ ํŒ๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด๋ฅผ ์ด์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด๋ฅผ ๊ฐ„๋‹จํžˆ ์„ค๋ช…ํ•˜์ž๋ฉด, 2๋ถ€ํ„ฐ n๊นŒ์ง€์˜ ์ˆ˜ ์ค‘์— ์†Œ์ˆ˜๋ฅผ ํŒ๋ณ„ํ•˜๊ธฐ ์œ„ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค๋ช…ํ•˜์ž๋ฉด, ์†Œ์ˆ˜๋ฅผ ์ฐพ์œผ๋ฉด ํ•ด๋‹น ์ˆ˜์˜ ๋ฐฐ์ˆ˜๋ฅผ ๋ชจ๋‘ ์ง€์›Œ๋‚˜๊ฐ€๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์ž์„ธํ•œ ์„ค๋ช…์€ ๋งํฌ์— ๋‚˜์™€์žˆ์Šต๋‹ˆ๋‹ค. 

 

์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด

 

 

 

 

์†Œ์Šค์ฝ”๋“œ

// ์†Œ์ˆ˜ ์ฐพ๊ธฐ
#include <string>
#include <vector>
#include <algorithm>
#include <set>
#include <math.h>

using namespace std;

// ์†Œ์ˆ˜ ํŒ๋ณ„ ํ•จ์ˆ˜
bool isPrime(int n) {
    if (n < 2) return false;

    // ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด
    for (int i = 2; i <= sqrt(n); i++)
        if (n % i == 0) return false;

    return true;
}


int solution(string numbers) {
    int answer = 0;
    vector<char> v;  // ์ข…์ด ์กฐ๊ฐ์˜ ๊ฐ ์ˆซ์ž ์ €์žฅ
    vector<int> nums;   // ์ข…์ด ์กฐ๊ฐ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ์ˆ˜ ์ €์žฅ
    
    // numbers์˜ ๊ฐ ์ˆซ์ž๋ฅผ v์— ์ž…๋ ฅ ํ›„ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ
    for (int i = 0; i < numbers.size(); i++) 
        v.push_back(numbers[i]);
    sort(v.begin(), v.end());

    do {
        string temp = "";
        // ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ์ˆซ์ž nums์— ์ €์žฅ
        for (int i = 0; i < v.size(); i++) {
            temp.push_back(v[i]);
            nums.push_back(stoi(temp));
        }
    } while (next_permutation(v.begin(), v.end()));

    // ์ค‘๋ณต ๊ฐ’ ์ง€์šฐ๊ธฐ
    sort(nums.begin(), nums.end());
    nums.erase(unique(nums.begin(), nums.end()), nums.end());
    
    for (int i = 0; i < nums.size(); i++)
        // ์†Œ์ˆ˜์ผ ๊ฒฝ์šฐ answer++
        if (isPrime(nums[i]))
            answer++;

    return answer;
}
 

 

 

 

 

 

๊ณต๋ถ€ํ•œ ๊ฒƒ์„ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. ์ˆ˜์ •ํ•  ๋ถ€๋ถ„์ด ์žˆ๋‹ค๋ฉด ์•Œ๋ ค์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค :)

 

 

728x90