본문 바로가기
프로그래밍/알고리즘 풀이

백준 15711 환상의 짝꿍 자바

by 방구석개발자 2021. 6. 20.
반응형

환상의 짝꿍 문제 보러가기

 

15711번: 환상의 짝꿍

환상의 나라 디디랜드에서는 인연의 증표로 끈을 하나씩 가지고 있다. 그들은 지극히 평범한 방법으로 이 끈을 이용하여 어떤 두 사람이 환상의 짝꿍인지 판단하는데, 두 사람의 끈을 서로 이

www.acmicpc.net

문제 설명

자바 코드

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

public class Main {
    static List<Integer> primeNumberList=new ArrayList<Integer>();
    static StringBuilder sb=new StringBuilder();
    public static void main(String[] args) throws Exception{
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

        primeNumberList.add(2);
        addPrimeNumberList(2000001);
        int t=Integer.parseInt(br.readLine());
        for(int i=0;i<t;i++){
            StringTokenizer strToken=new StringTokenizer(br.readLine()," ");
            long a=Long.parseLong(strToken.nextToken());
            long b=Long.parseLong(strToken.nextToken());
            환상의짝꿍인가요(a+b);
        }
        System.out.print(sb.toString());
    }

    public static void 환상의짝꿍인가요(long num){
        if(num<4){
            sb.append("NO\n");
        }else if(num%2==0){
            sb.append("YES\n");
        }else{
            if(isPrimeNumber(num-2)) sb.append("YES\n");
            else sb.append("NO\n");
        }
    }

    public static boolean isPrimeNumber(long num){
        long x=(long)Math.sqrt(num);
        for (Integer primeNumber:primeNumberList) {
            if(primeNumber>x){
                return true;
            }
            if(num%primeNumber==0) return false; //나누어떨어지면 소수가 아님
        }
        return true;
    }

    public static void isDivided(int number){//소수로 나누었을때 떨어지는지 확인
        int x=(int)Math.sqrt(number);
        for (Integer primeNumber:primeNumberList) {
            if(primeNumber>x){
                primeNumberList.add(number);
                return;
            }
            if(number%primeNumber==0) return; //나누어떨어지면 소수가 아님
        }
    }

    public static void addPrimeNumberList(int number){//소수리스트에 추가
        for(int i=3;i<=number;i+=2){
            isDivided(i);
        }
    }

}

문제 설명

이번 문제는 https://travelbeeee.tistory.com/493 를 보고 풀었습니다. 내용 설명이 잘되어 있습니다.

 

 

 

 

 

반응형

댓글