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

๐Ÿง‘‍๐Ÿ’ป ์ฝ”๋”ฉ/Algorithm

๋ฐฑ์ค€ 1644 - ์†Œ์ˆ˜์˜ ์—ฐ์†ํ•ฉ (c++)

728x90

๋ฌธ์ œ ์ถœ์ฒ˜ : https://www.acmicpc.net/problem/1644

 

<์ ‘๊ทผ ๋ฐฉ๋ฒ•>

์šฐ์„  N์˜ ์ตœ๋Œ€๊ฐ’์ธ 4๋ฐฑ๋งŒ๊นŒ์ง€์˜ ์†Œ์ˆ˜๋“ค์„ ๊ตฌํ•ฉ๋‹ˆ๋‹ค.

๊ทธ ํ›„, ํˆฌ ํฌ์ธํ„ฐ๋ฅผ ์ด์šฉํ•ด์„œ ํ•ฉ์ด N์ด ๋˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์„ธ๋ ค ์ฃผ๋ฉด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

<ํ’€์ด>

1. ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด๋ฅผ ์ด์šฉํ•ด์„œ 4๋ฐฑ๋งŒ๊นŒ์ง€์˜ ์†Œ์ˆ˜๋ฅผ ๊ตฌํ•ด์„œ vector์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

2. ๋ฒกํ„ฐ์˜ ์ œ์ผ ์•ž 0๋ฒˆ์งธ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ณ€์ˆ˜ ๋‘ ๊ฐœ๋ฅผ ์„ ์–ธํ•ด์ฃผ๊ณ  ํ•ฉ์„ ์ €์žฅํ•˜๋Š” ๋ณ€์ˆ˜๋„ ์„ ์–ธํ•ด์ค๋‹ˆ๋‹ค.

3. ํˆฌ ํฌ์ธํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•˜์—ฌ sum์ด N๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์œผ๋ฉด sum์— p1์ด ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ’์„ ๋นผ๊ณ  p1์„ ํ•œ ์นธ ๋’ค๋กœ N๋ณด๋‹ค ์ž‘์œผ๋ฉด p2๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ’์„ ๋”ํ•˜๊ณ  p2๋ฅผ ํ•œ ์นธ ๋’ค๋กœ ์ด๋™์‹œํ‚ต๋‹ˆ๋‹ค. ๊ทธ์ค‘ sum๊ณผ N์ด ๊ฐ™์œผ๋ฉด result++๋ฅผ ํ•ด์ค๋‹ˆ๋‹ค.

4. p2๊ฐ€ Vec์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๊ฑฐ๋‚˜ p1์ด p2๋ณด๋‹ค ์ปค์ง€๋ฉด ๋ฐ˜๋ณต๋ฌธ์„ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

 

<์†Œ์Šค ์ฝ”๋“œ>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <iostream>
#include <vector>
#define MAX 4000001
 
using namespace std;
 
int main() {
  int N, result=0;
  bool check[MAX]={0};
  vector<int> Vec;
  
  cin >> N;
  for(int i=2; i*i<=N; i++){
    if(!check[i]){
      for(int j=i*i; j<=N; j+=i){
        check[j]=true;
      }
    }
  }
 
  for(int i=2; i<=N; i++){
    if(!check[i]) Vec.push_back(i);
  }
  
  int p1=0, p2=0, sum=2;
  while(p1<=p2&&p2<Vec.size()){
    if(sum>=N){
      if(sum==N) result++;
      sum -= Vec[p1];
      p1++;
    }
    else{
      p2++;
      sum += Vec[p2];
    }
  }
 
  cout << result;
}
cs

 

 

<ํ›„๊ธฐ>

์ฒ˜์Œ์— ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ sum์„ Vec[0]์œผ๋กœ ์ดˆ๊ธฐํ™”ํ–ˆ์—ˆ๋Š”๋ฐ, ๊ฐ’์ด ํ•œ ๊ฐœ ์ผ ๋•Œ Vec์— ๊ฐ’์ด push ๋˜์ง€ ์•Š๋Š”๋ฐ Vec[0]์— ์ ‘๊ทผํ•˜๋ ค๊ณ  ํ•ด์„œ ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ ๋ฐœ์ƒํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋ถ„๋ช… ๋ฒ”์œ„๋ฅผ ์ œ๋Œ€๋กœ ์ง€์ •ํ–ˆ๋Š”๋ฐ OutOfBounds๊ฐ€ ๋œจ๊ธธ๋ž˜ ์งˆ๋ฌธ ๊ฒŒ์‹œํŒ์„ ๋’ค์ ธ๋ณด๋‹ˆ ์ €๋ž‘ ๊ฐ™์€ ์‹ค์ˆ˜๋ฅผ ํ•˜์‹  ๋ถ„์ด ๊ณ„์‹œ๋”๊ตฐ์š”ใ…Žใ…Ž...

๋ญ ๊ทธ ์™ธ์—๋Š” ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด์™€ ํˆฌ ํฌ์ธํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•  ์ค„ ์•ˆ๋‹ค๋ฉด ํฌ๊ฒŒ ์–ด๋ ต์ง€ ์•Š์€ ๋ฌธ์ œ์˜€์Šต๋‹ˆ๋‹ค.

728x90