Algorithm/Java

[알고리즘_Java] 백준 9094번 수학적 호기심

Cune 2022. 3. 2. 20:38

 


 

 

<풀이> 

(a2+b2+m)/(ab)의 값이 정수일때 (a,b)의 개수를 구하는거기 때문에 먼저 식의 값이 정수인지 확인해야한다.

 

double test = (double)(a*a+b*b+m)/(a*b);  -> 식의 값을 실수로 구하고 
if(test-(int)test==0.0)  -> 식의 값이 정수인지 판별했습니다

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;


public class Main {

    public static void main(String[] args) throws NumberFormatException, IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

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

        for (int i = 0; i < t; i++) {
           String[] arr = br.readLine().split(" ");
           int n = Integer.parseInt(arr[0]);
           int m = Integer.parseInt(arr[1]);
           int cnt = 0;

            for (int a = 1; a-1 < n; a++) {
                for (int b = a+1; b < n; b++) {
                    double test = (double)(a*a+b*b+m)/(a*b);    //나누기 결과 정수가 아닌 소수점으로 받아오기
                    if(test-(int)test==0.0){    // ex) 2.2-2=0.2 (정수아님) , 2.0-2=0.0 (정수)
                            cnt++;
                    }
                }
            }

            bw.write(cnt+"\n");

        }
        bw.close();
    }
}

항상 나눈값을 정수로 받아서 몫을 구해오다가 일반 수학처럼 실수로 받아오는 부분이 조금 낯설었지만 검색해서 (double)을 통해서 바꿔주고 실수-정수로 판별하는 방법으로 쉽게 풀 수 있었다. 검색이 없었다면 혼자선 못풀었을거같다