๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm ๐Ÿง‘๐Ÿป‍๐Ÿ’ป/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค(Programmers)

[c++] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ์†Œ์ˆ˜ ๋งŒ๋“ค๊ธฐ(Level 1)

by ์•ˆ์ฃผํ˜• 2022. 4. 11.

๋ฌธ์ œ

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

์ฃผ์–ด์ง„ ์ˆซ์ž ์ค‘ 3๊ฐœ์˜ ์ˆ˜๋ฅผ ๋”ํ–ˆ์„ ๋•Œ ์†Œ์ˆ˜๊ฐ€ ๋˜๋Š” ๊ฒฝ์šฐ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ˆซ์ž๋“ค์ด ๋“ค์–ด์žˆ๋Š” ๋ฐฐ์—ด nums๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, nums์— ์žˆ๋Š” ์ˆซ์ž๋“ค ์ค‘ ์„œ๋กœ ๋‹ค๋ฅธ 3๊ฐœ๋ฅผ ๊ณจ๋ผ ๋”ํ–ˆ์„ ๋•Œ

programmers.co.kr

์ฝ”๋“œ

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

int solution(vector<int> nums) {
    int answer = 0;

    map<int,bool> prime;
    
    for(int i=0; i<=2997; i++) prime[i] = true;
    prime[0] = prime[1] = false;
    for(int i=2; i<=2997; i++){  //์†Œ์ˆ˜ ์ €์žฅ
        if(prime[i]==true){
            int k = 2;
            while(i*k <=2997){
                prime[i*k] = false;
                k++;
            }
        }
    }
    
    for(int a=0; a<nums.size()-2; a++){
        for(int b=a+1; b<nums.size()-1; b++){
            for(int c=b+1; c<nums.size(); c++){
                int check_num = nums[a] + nums[b] + nums[c];
                if(prime[check_num]) answer++;
            }
        }
    }
    

    return answer;
}

ํ’€์ด(22๋ถ„)

์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์†Œ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์˜€์Šต๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•œ ๋ฌธ์ œ์˜€๋Š”๋ฐ, ์ผ๋‹จ ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋– ์˜ค๋ฅด์ง€ ์•Š์•„์„œ ์‹œ๊ฐ„์ด ์ข€ ๊ฑธ๋ ธ๊ณ , ์ฒ˜์Œ ์†Œ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๊ณผ์ •์„ nums์—์„œ ๊ณ ๋ฅผ ์ˆ˜ ์žˆ๋Š” ์ตœ๊ณ ์˜ ๊ฒฝ์šฐ์ธ 1000+999+998 = 2997๋งŒํผ ๊ตฌํ•ด์•ผ ํ•˜๋Š”๋ฐ 1000์œผ๋กœ ์„ค์ •ํ–ˆ๋‹ค๊ฐ€ ์‹œ๊ฐ„์„ ์ข€ ๊นŒ๋จน์—ˆ์Šต๋‹ˆ๋‹ค. ์—ฌํŠผ ์ด๋ฒˆ ๋ฌธ์ œ๋ฅผ ๊ณ„๊ธฐ๋กœ ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด์„œ ๋‹ค์‹œ ํ•œ๋ฒˆ ๊ธฐ์–ตํ•ด์•ผ๊ฒ ์Šต๋‹ˆ๋‹ค.

๋Œ“๊ธ€