프로그래머스 lv 2. 42839 소수찾기 c++

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

 

#include <bits/stdc++.h>

using namespace std;

map<int, bool> M;

bool isPrime(string num){
    int n = stoi(num);
    
    if(M[n]) return false; 
    M[n] = true;
    if(n == 1 || n == 0) return false;
    if(n == 2) return true;
    
    for(int i=2; i<=sqrt(n); i++){
        if(n % i == 0){
            M[n] = false;
            return false;
        }              
    }
    M[n] = true;
    return true;
}

int solution(string numbers) {
    int answer = 0;

    sort(numbers.begin(), numbers.end());
    do{
        for(int i=1; i<=numbers.size(); i++){
            string num = numbers.substr(0, i);         
            if(isPrime(num)) answer++;
        }
    }while(next_permutation(numbers.begin(), numbers.end())); //next_permutation을 통해서 다음 순열로 테스트
    
    return answer;
}

 

이때에 substr(a, b)에 대해서 제대로 이해하기 위해 추가하는 사항. 

`substr(a, b)` 함수는 문자열에서 문자열의 일부를 추출하는 데 사용됩니다. 여기서 `a`와 `b`는 다음과 같은 의미를 갖습니다:

- `a`: 시작 인덱스. 추출을 시작할 문자열 내의 위치를 나타냅니다. 이 위치부터 추출이 시작됩니다. 인덱스는 0부터 시작하며, 첫 번째 문자는 0번 인덱스에 해당합니다.
- `b`: 추출할 문자의 길이. 이 값은 시작 인덱스 `a`부터 시작하여 추출할 문자열의 길이를 나타냅니다. 즉, `a` 위치부터 `a + b - 1` 위치까지의 문자열을 추출합니다.

예를 들어, 문자열 "Hello, World!"에 대해 다음과 같은 예시를 고려해보겠습니다:

- `substr(0, 5)`은 문자열의 시작부터 5개의 문자를 추출하므로 "Hello"를 반환합니다.
- `substr(7, 5)`은 인덱스 7부터 시작하여 5개의 문자를 추출하므로 ", Wor"를 반환합니다.
- `substr(0, 1)`은 문자열의 시작부터 1개의 문자를 추출하므로 "H"를 반환합니다.

이러한 방식으로 `substr()` 함수는 문자열 내에서 원하는 부분 문자열을 선택하고 반환할 수 있습니다.
  Comments,     Trackbacks