Algorithm๐Ÿฅ‡

17103.๊ณจ๋“œ๋ฐ”ํํŒŒํ‹ฐ์…˜

hae02y 2023. 10. 20. 23:35
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

  • ๊ณจ๋“œ๋ฐ”ํ์˜ ์ถ”์ธก: 2๋ณด๋‹ค ํฐ ์ง์ˆ˜๋Š” ๋‘ ์†Œ์ˆ˜์˜ ํ•ฉ์œผ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

์ง์ˆ˜ N์„ ๋‘ ์†Œ์ˆ˜์˜ ํ•ฉ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋Š” ํ‘œํ˜„์„ ๊ณจ๋“œ๋ฐ”ํ ํŒŒํ‹ฐ์…˜์ด๋ผ๊ณ  ํ•œ๋‹ค. ์ง์ˆ˜ N์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ๊ณจ๋“œ๋ฐ”ํ ํŒŒํ‹ฐ์…˜์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•ด๋ณด์ž. ๋‘ ์†Œ์ˆ˜์˜ ์ˆœ์„œ๋งŒ ๋‹ค๋ฅธ ๊ฒƒ์€ ๊ฐ™์€ ํŒŒํ‹ฐ์…˜์ด๋‹ค.

## ์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜ T (1 โ‰ค T โ‰ค 100)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋Š” ํ•œ ์ค„๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ณ , ์ •์ˆ˜ N์€ ์ง์ˆ˜์ด๊ณ , 2 < N โ‰ค 1,000,000์„ ๋งŒ์กฑํ•œ๋‹ค.

## ์ถœ๋ ฅ

๊ฐ๊ฐ์˜ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋งˆ๋‹ค ๊ณจ๋“œ๋ฐ”ํ ํŒŒํ‹ฐ์…˜์˜ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

์‹œ๊ฐ„ ์ œํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ ์ œ์ถœ ์ •๋‹ต ๋งžํžŒ ์‚ฌ๋žŒ ์ •๋‹ต ๋น„์œจ
0.5 ์ดˆ 512 MB 20084 7692 5885 36.537%

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

ํ’€์ด

์ฝ”๋“œ

์ฒซ๋ฒˆ์งธ ์‹œ๋„

import java.io.BufferedReader;  
import java.io.IOException;  
import java.io.InputStreamReader;  
import java.util.Arrays;  

public class ๊ณจ๋“œ๋ฐ”ํํŒŒํ‹ฐ์…˜ {  


    public static void main(String[] args) throws IOException {  
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));  

        boolean[] bool = new boolean[1000001];  
        Arrays.fill(bool, true); //bool์˜ ๊ธฐ๋ณธ๊ฐ’์„ true๋กœ ๋ณ€๊ฒฝ.  

        int t = Integer.parseInt(br.readLine());  

        for(int i=2; i<1000001; i++){  
            if(bool[i]){  
                for(int j=i+i; j<1000001; j=j+i){ //j=6 j=9 j=12 j=15 ... ๋ฐ˜๋ณต  
                    bool[j] = false; //false๋ฉด ์†Œ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋‹ค.  
                }  
            }  
        }  

        for(int i=0; i<t; i++){  
            int n = Integer.parseInt(br.readLine());  
            int count = 0;  
            for(int k=2; k<=n; k++){  
                for(int j=k; j<=n; j++){  
                    if(j + k == n && bool[k] && bool[j]){  
                        count++;  
                    }  
                }  
            }  
            System.out.println(count);  
        }  
    }  
}

๊ฒฐ๊ณผ์ ์œผ๋กœ ์‹คํŒจ....ใ… ใ… 

3์ค‘ for๋ฌธ์„ ๊ฑธ์–ด์ค€ ๋ถ€๋ถ„์ด ๋ฌธ์ œ๊ฐ€ ๋˜์„œ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚ฌ๋‹ค.


for(int i=0; i<t; i++){  
            int n = Integer.parseInt(br.readLine());  
            int count = 0;  
            for(int j=2; j<=n/2; j++){
                if(bool[j] && bool[n-j]) count++;
            } 
            System.out.println(count);  
            }
        }  

์š”๋ ‡๊ฒŒ ์ฒ˜๋ฆฌํ•ด์„œ ํ‘ธ๋‹ˆ๊นŒ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜์˜€๋‹ค..!

๋ฐ˜์‘ํ˜•