본문 바로가기
Algorithm

[프로그래머스] 42839번 소수 찾기 C++

by SoyeonCha 2024. 11. 13.

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/42839

 

메모

- 소수인지 판별할 때 에라토스테네스의 체 사용

- stoi

  https://velog.io/@haminggu/C-%EB%AC%B8%EC%9E%90%EC%97%B4-%EC%B2%98%EB%A6%AC-%ED%95%A8%EC%88%98-cstr-atoi-stoi-%ED%8A%B9%EC%A7%95%EA%B3%BC-%EC%82%AC%EC%9A%A9%EB%B2%95

 

[C++] 문자열 처리 함수 c_str(), atoi(), stoi() 특징과 사용법

c_str() 함수는 C++의 std::string 클래스의 멤버 함수로, C++ 스타일의 문자열을 C 스타일의 문자열(const char\*)로 변환합니다.int main() { std::string cppStr = "Hello, World!"; const ch

velog.io

 

- vector 중복 제거

  https://dpdpwl.tistory.com/39

 

[C++]벡터 중복제거(sort,unique,erase)

벡터에서 중복 원소제거가 필요할 때가 있습니다. 그럴때 sort,unique,erase 의 기능을 적절히 활용하여 중복원소를 제거 할 수 있습니다. 먼저 백터하나를 만든뒤 데이터를 막넣습니다. (algorithm 을 i

dpdpwl.tistory.com

- unique는 연속된 중복 원소를 쓰레기값으로 판별해서 vector의 가장 끝 부분으로 보냄. (정확한 이동이 이게 맞는지는 모르겠음)

  중복되지 않는 값만 vector의 앞쪽으로 보냄.

- unique가 끝났으면 반환되는값은 vector의 쓰레기값의 첫번째 위치가 됨

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

- next_permutation에서 permutation은 순열, 그니까 확통에서 3P2 할 때 그 P

  https://taehun0933.tistory.com/18

 

 

 

맞힌 코드

#include <bits/stdc++.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 = "";
        
        // 만들 수 있는 모든 수
        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++){
        // 소수인 경우
        if (isPrime(nums[i]))
            answer++;
    }
    return answer;
}

 

 

참고)

https://mjmjmj98.tistory.com/50

 

[프로그래머스 / C++] 소수 찾기 풀이

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

mjmjmj98.tistory.com

 

https://beankong-devlog.tistory.com/48

 

프로그래머스 / level.2 / 소수 찾기(C++)

https://school.programmers.co.kr/learn/courses/30/lessons/42839 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는

beankong-devlog.tistory.com