๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“ ์•Œ๊ณ ๋ฆฌ์ฆ˜/Programmers

[C++/PGS] Lv.2 : ์†Œ์ˆ˜ ์ฐพ๊ธฐ (์™„์ „ํƒ์ƒ‰)

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

 

๋ฌธ์ œ ์„ค๋ช…

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

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

 

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

 

1. set ์€ ์ค‘๋ณต์„ ๊ฑธ๋Ÿฌ์ฃผ๋Š” ์ง‘ํ•ฉ์ด๋‹ค!

 

2. ์†Œ์ˆ˜๋ฅผ ํ™•์ธํ•  ๋•Œ์—๋Š” ์ˆซ์ž๋ฅผ ๋‚˜๋ˆ„๋Š” ๋ฐ˜๋ณต๋ฌธ์˜ ๋ฒ”์œ„๋ฅผ 2 ์ด์ƒ sqrt(n) ์ดํ•˜๋กœ ์„ค์ •ํ•œ๋‹ค

 

3. algorithm ํ—ค๋”ํŒŒ์ผ์˜ next_permutation ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ๋ชจ๋“  ์ˆœ์—ด์„ ํ•˜๋‚˜์”ฉ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

-> ๋Œ€์‹ , ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋จผ์ € ์ •๋ ฌ์ด ํ•„์š”ํ•จ

 

4.. while()~ ๋Œ€์‹  do while ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š”?

-> next_permutation์„ ์ด์šฉํ•˜์—ฌ ๋‹ค์Œ ์ˆœ์—ด๋กœ ๋„˜์–ด๊ฐ€๊ธฐ ์ „์—, ์ฒ˜์Œ ์ƒํƒœ์˜ ์ˆœ์—ด๋กœ๋„ do ๋‚ด๋ถ€์˜ ๋‚ด์šฉ์„ ์‹คํ–‰์‹œ์ผœ์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ.

 

 

๋‚˜์˜ ํ’€์ด

#include <string>
#include <vector>
#include <algorithm>
#include <set>
#include <cmath>
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;
    int n=0;
    set<int> s;
    sort(numbers.begin(), numbers.end());
    do{
        for(int i=0; i<numbers.length(); ++i){
            n = stoi(numbers.substr(0,i+1));
            if(isPrime(n)) s.insert(n);
        }
    } while(next_permutation(numbers.begin(), numbers.end()));
    answer = s.size();
    return answer;
}