[프로그래머스][Level1] 소수 만들기 c++

2022. 9. 3. 13:49·🍞 Algorithm/Programmers
https://programmers.co.kr/learn/courses/30/lessons/12977 
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

풀이과정

소수 찾는 알고리즘은 에라토스테네스의 체를 사용했다.  
3개의 수를 더할 때는 3중 for문을 사용하여 더해주었고,  
더한 값을 num 배열에 담았을 때 0이 아니면 소수이므로 카운트해준다.

 

풀이1

#include <vector>
#include <iostream>
#include <cmath>
using namespace std;

const int NUM = 3000;
int num[NUM];

void PrimeNum(){
    for(int i = 2; i <= NUM; i++){
        num[i] = i;
    }
    for(int i = 2; i <= sqrt(NUM); i++){
        if(!num[i]) continue;
        for(int j = i * i; j <= NUM; j += i){
            num[j] = 0;
        }
    }
}

int solution(vector<int> nums) {
    int answer = 0;
    PrimeNum();
    for(int i = 0; i < nums.size() - 2; i++){
        for(int j = i + 1; j < nums.size() - 1; j++){
            for(int k = j + 1; k < nums.size(); k++){
                int sum = nums[i] + nums[j] + nums[k];
                if(num[sum]) answer++;
            }
        }
    }
    return answer;
}

 

풀이2

#include <vector>
#include <iostream>
using namespace std;

const int NUM = 3000;
int num[NUM];

// sqrt 함수 구현
int sqrt(int n){
    int s = 0;
    int t = 0;
    s = n / 2;
    while(s != t){
        t = s;
        s = ((n / t) + t) / 2;
    }
    return s;
}

void PrimeNum(){
    for(int i = 2; i <= NUM; i++){
        num[i] = i;
    }
    for(int i = 2; i <= sqrt(NUM); i++){
        if(!num[i]) continue;
        for(int j = i * i; j <= NUM; j += i){
            num[j] = 0;
        }
    }
}

int solution(vector<int> nums) {
    int answer = 0;
    PrimeNum();
    for(int i = 0; i < nums.size() - 2; i++){
        for(int j = i + 1; j < nums.size() - 1; j++){
            for(int k = j + 1; k < nums.size(); k++){
                int sum = nums[i] + nums[j] + nums[k];
                if(num[sum]) answer++;
            }
        }
    }

    return answer;
}
저작자표시 (새창열림)

'🍞 Algorithm > Programmers' 카테고리의 다른 글

[프로그래머스][Level1] 없는 숫자 더하기 c++  (0) 2022.09.03
[프로그래머스][Level1] 숫자 문자열과 영단어 c++  (0) 2022.09.03
[프로그래머스][Level1] 로또의 최고 순위와 최저 순위 c++  (0) 2022.09.03
[프로그래머스][Level1] 내적 c++  (0) 2022.09.03
[프로그래머스][Level1] x만큼 간격이 있는 n개의 숫자 c++  (0) 2022.09.03
'🍞 Algorithm/Programmers' 카테고리의 다른 글
  • [프로그래머스][Level1] 없는 숫자 더하기 c++
  • [프로그래머스][Level1] 숫자 문자열과 영단어 c++
  • [프로그래머스][Level1] 로또의 최고 순위와 최저 순위 c++
  • [프로그래머스][Level1] 내적 c++
박빵이
박빵이
2025년에도 갓생살기
  • 박빵이
    기억보다 기록
    박빵이
  • 전체
    오늘
    어제
    • 분류 전체보기 (337)
      • 🍞 FrontEnd (97)
        • HTML+CSS (4)
        • JavaScript (17)
        • TypeScript (4)
        • React (52)
        • Next.js (2)
        • Android (15)
      • 🍞 BackEnd (24)
        • Java (15)
        • Node.js (6)
        • Spring (1)
      • 🍞 Cloud & Infra (0)
        • AWS SAA (0)
        • Microsoft Azure (0)
      • 🍞 Algorithm (147)
        • C++ (4)
        • Baekjoon (41)
        • Programmers (97)
      • 🍞 Computer Science (18)
        • 운영체제 (1)
        • 데이터 통신 (6)
        • 네트워크 (6)
        • 데이터베이스 (1)
      • 🍞 대외활동 & 부트캠프 (42)
        • 삼성 청년 SW 아카데미 (1)
        • LG유플러스 유레카 (0)
        • 한국대학생IT경영학회 (1)
        • IT연합동아리 UMC (17)
        • 길벗 블로깅 멘토 (18)
        • IT연합동아리 피로그래밍 (3)
        • 개발 컨퍼런스 (2)
  • 블로그 메뉴

    • Admin
  • 링크

    • GitHub
  • 인기 글

  • 태그

    안드로이드
    길벗 블로깅 멘토
    C++
    코틀린
    길벗 블로깅 멘토링
    백준
    위상정렬
    Java
    프로그래머스
    react
    알고리즘
    level1
    level2
    유니온파인드
    umc
    Android
    JavaScript
    Front
    코딩자율학습
    map
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
박빵이
[프로그래머스][Level1] 소수 만들기 c++
상단으로

티스토리툴바