알고리즘/BaekJoon 알고리즘

[백준알고리즘] Q1977 완전재곱수

lkh's 2018. 11. 13. 02:31


1. Java 구현

           
package Q1977;

import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int m = (int)Math.ceil(Math.sqrt(Double.parseDouble(br.readLine())));
        int n = (int)Math.sqrt(Double.parseDouble(br.readLine()));

        int sum = 0;
        for (int i = m; i <= n; i++) {
            sum += (i * i);
        }

        if(sum > 0) {
            bw.write(sum + "\n");
            bw.write((m * m) + "\n");
        } else {
            bw.write("-1" + "\n");
        }
        bw.close();
    }
}


2. 코드설명

 처음 문제를 풀었을 때는 입력받은 m 부터 n 까지 반복문을 동작하는 방식으로 풀었다. m과 n은 1 ~ 10000 까지 입력이 가능하기 때문에 최악에는 10000번

 반복문을 돌아야 한다. 물론 충분히 처리가 가능하겠지만, 반복문이 동작하는 횟수를 조금 줄일 수 있는 방법을 생각했다.

 m은 입력받은 수보다 큰 완전 재곱수로 변환하고, n은 입력받은 수보다 작은 완전재곱수로 변환해서, m과 n의 크기를 축소해서 반복횟수를 줄였다.