본문 바로가기
백준

[백준] 1977번 : 완전제곱수 – JAVA [자바]

by Hongwoo 2022. 9. 12.
반응형

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

 

1977번: 완전제곱수

M과 N이 주어질 때 M이상 N이하의 자연수 중 완전제곱수인 것을 모두 골라 그 합을 구하고 그 중 최솟값을 찾는 프로그램을 작성하시오. 예를 들어 M=60, N=100인 경우 60이상 100이하의 자연수 중 완

www.acmicpc.net

 


  • 문제

 

 


  • 문제 풀이

백준 1977번 완전제곱수는 브론즈 2 난이도의 수학, 구현 및 브루트 포스 문제이다. 이 문제에서는 입력으로 10,000 이하인 자연수 M과 N이 주어진다. 이때, M이상 N이하인 완전 제곱수의 합과 최소 완전 제곱수를 구하면 된다.

 

완전 제곱수란 숫자 A의 제곱이 M이상 N이하인 제곱인 수를 뜻한다. 

 

이 문제는 for 문을 이용해서 간단하게 풀 수 있다. 우선 i = 1부터 i * i <= n까지 for 문을 돌린다. 이 이유는 i의 제곱이 N보다 커지면 i를 고려할 필요가 없기 때문이다. 따라서 for 문에서 i * i ≥ m 그리고 i * i ≤ n이면 sum에 i * i를 더해준다. 그리고 첫 제곱수를 min에 초기화해준다.

 

for 문이 끝나고 sum = 0이면 -1을 출력하고 아니면 sum과 min을 출력해주면 된다.

 

자세한 코드는 아래에 있다.

 


  • 코드

 

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int m = Integer.parseInt(br.readLine());  //m 입력받기
        int n = Integer.parseInt(br.readLine());  //n 입력받기
        int min = Integer.MAX_VALUE;  //최소 완전제곱수  
        int sum = 0;  //완전제곱수들의 합
        for (int i = 1; i*i <= n; i++) {
            if (i * i >= m && i * i <= n) {  //i의 제곱수가 범위 안에 있을 때
                min = Math.min(i*i, min);
                sum += i*i;
            }
        }
        if (sum == 0) {
            System.out.print(-1);
        } else {
            System.out.print(sum + "\n" + min);
        }
    }
}

 

반응형

댓글