[c/c++] ๋ฐฑ์ค€ 4948 (Silver 2)

์€๋™ยท2023๋…„ 2์›” 18์ผ
0

Baekjoon

๋ชฉ๋ก ๋ณด๊ธฐ
32/49

๐Ÿ”จ ๋ฌธ์ œ

https://www.acmicpc.net/problem/4948

๋ฒ ๋ฅดํŠธ๋ž‘ ๊ณต์ค€์€ ์ž„์˜์˜ ์ž์—ฐ์ˆ˜ n(1 โ‰ค n โ‰ค 123,456)์— ๋Œ€ํ•˜์—ฌ, n๋ณด๋‹ค ํฌ๊ณ , 2n๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์†Œ์ˆ˜๋Š” ์ ์–ด๋„ ํ•˜๋‚˜ ์กด์žฌํ•œ๋‹ค๋Š” ๋‚ด์šฉ์„ ๋‹ด๊ณ  ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, 10๋ณด๋‹ค ํฌ๊ณ , 20๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์†Œ์ˆ˜๋Š” 4๊ฐœ๊ฐ€ ์žˆ๋‹ค. (11, 13, 17, 19) ๋˜, 14๋ณด๋‹ค ํฌ๊ณ , 28๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์†Œ์ˆ˜๋Š” 3๊ฐœ๊ฐ€ ์žˆ๋‹ค. (17,19, 23)

์ž์—ฐ์ˆ˜ n์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, n๋ณด๋‹ค ํฌ๊ณ , 2n๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์†Œ์ˆ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ๊ฐ ์ผ€์ด์Šค๋Š” n์„ ํฌํ•จํ•˜๋Š” ํ•œ ์ค„๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.

์ž…๋ ฅ์˜ ๋งˆ์ง€๋ง‰์—๋Š” 0์ด ์ฃผ์–ด์ง„๋‹ค.

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ๋Œ€ํ•ด์„œ, n๋ณด๋‹ค ํฌ๊ณ , 2n๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์†Œ์ˆ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.


๐Ÿ”จ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•

์ด ๋ฌธ์ œ๋Š” n์˜ ๋ฒ”์œ„๋ฅผ ์ž˜ ๋ด์•ผํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค. ํ‰์†Œ์— ๋ฐฑ์ค€ ํ’€ ๋•Œ ์ƒ๊ฐ ์—†์ด ํ’€๋ฉด n์˜ ๋ฒ”์œ„๋ฅผ ๋ณด๊ณ  ๋ฐฐ์—ด์„ ๊ทธ๋ƒฅ n์˜ ๊ฐ’์œผ๋กœ ๋„ฃ์–ด๋ฒ„๋ฆด ์ˆ˜ ์žˆ๋‹ค.
๋‚˜๋„ ์ฒ˜์Œ์— arr[123456]์„ ์„ ์–ธํ•˜๊ณ  ๋ฌธ์ œ ํ’€์ด๋ฅผ ์ œ์ถœํ–ˆ๋Š”๋ฐ ๊ณ„์† '๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ(Out OF Bound)'๊ฐ€ ๋‚˜์™”๋‹ค. ์ด ๋Ÿฐํƒ€์ž„์—๋Ÿฌ๋Š” ๋ณดํ†ต ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ ์ž˜๋ชป ์„ค์ •ํ–ˆ์„ ๋•Œ ๋‚˜์˜ค๋Š” ์—๋Ÿฌ์ธ๋ฐ ๊ทธ ์—๋Ÿฌ๋ฅผ ๋ณด๊ณ  ๋‚˜์„œ์•ผ ๋‚ด๊ฐ€ ๋ฐฐ์—ด ํฌ๊ธฐ ์„ค์ •์„ ์ž˜๋ชปํ–ˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜๋‹คใ…Žใ…Ž (2n๊นŒ์ง€ ๋ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ)

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


๐Ÿ”จ ์ฝ”๋“œ

#include <iostream>
using namespace std;
int n;
int arr[246912] = { 0 };


void eratos(int start) {
    int cnt = 0;
    for (int i = 2; i <= 2 * start; i++) {
        arr[i] = i;
    }

    for (int i = 2; i <= 2*start; i++) {
        if (arr[i] == 0) continue;  
        for (int j = i * 2; j <= 2*start; j += i) { 
            arr[j] = 0;
        }
    }

    for (int i = start+1; i <= 2 * start; i++) {
        if (arr[i] != 0) cnt++; 
    }
    cout << cnt << '\n';
}
int main() {

    cin.tie(NULL);
    cout.tie(NULL);
    ios::sync_with_stdio(false);

    while (1) {
        cin >> n;
        if (n == 0) break;
        else eratos(n);
    }
    return 0;
}
profile
์ž์ž ์„ ์ˆ˜์ž…์žฅ~

0๊ฐœ์˜ ๋Œ“๊ธ€