공부하기/백준

[Java] 백준 풀기 1977 - 완전 제곱수

XEV 2023. 9. 19. 23:20

자바 백준 1977번

브론즈 2

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

 

1977번: 완전제곱수

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

www.acmicpc.net

 

 

 

 

 

문제 보기

분류: 수학, 구현, 브루트포스 알고리즘

 

 

 

 

 

문제 풀기

주어진 범위의 수를 하나씩 선택하여 Math.sqrt() 를 이용하여 제곱근을 구한다. 완전 제곱수인지 확인하기 위해 구한 제곱근을 int 타입으로 변경하고 제곱한 값이 초기에 선택한 값과 일치하는지 확인한다. 만약 일치한다면 완전 제곱수이므로 최솟값 또는 누적합으로 저장을 한다.

완전 제곱수 존재 여부에 따라 결과 조건에 맞게 출력한다.

 

 

 

 

 

코드 보기

import java.util.Scanner;

public class Main {
    
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        // 입력으로 M과 N을 받음
        int M = sc.nextInt(); // M은 범위의 시작 값
        int N = sc.nextInt(); // N은 범위의 끝 값
        
        // 합과 최소 완전제곱수를 초기화
        int sum = 0;
        int minPerfectSquare = -1;
        
        // M부터 N까지의 범위에서 완전제곱수를 찾음
        for (int i = M; i <= N; i++) {
            int sqrt = (int) Math.sqrt(i); // i의 제곱근을 계산
            if (sqrt * sqrt == i) { // i가 완전제곱수인 경우
                if (minPerfectSquare == -1) {
                    minPerfectSquare = i; // 첫 번째 완전제곱수를 찾으면 최솟값으로 설정
                }
                sum += i; // 완전제곱수를 합에 추가
            }
        }
        
        // 완전제곱수가 없을 경우 -1을 출력, 아닌 경우 합과 최솟값을 출력
        if (minPerfectSquare == -1) {
            System.out.println(-1);
        } else {
            System.out.println(sum);
            System.out.println(minPerfectSquare);
        }
    }
    
}