Java/백준알고리즘

[Java] 백준알고리즘 #1977 완전제곱수

Sehyeok20 2021. 7. 30. 14:40
반응형

백준알고리즘 #1977 완전제곱수 문제

M과 N 사이의 완전제곱수를 구하고, 구한 완전제곱수들의 합과 최솟값을 구하는 문제이다.

 

먼저 주어진 조건에 M과 N은 10000 이하의 자연수라고 했으므로 자연히 완전제곱수의 범위는 1~100의 제곱(1~10000)으로 줄어든다.

따라서 이 100개의 수를 배열로 만들어 준다.

int square[] = new int[101];

for(int i = 1;i<=100;i++) {
	square[i] = i * i;
	
}

squere[] 라는 배열에 1의 제곱부터 100의 제곱까지의 수를 저장해 두고 이 값이 M과 N 사이의 범위에 있는지를 확인하면 된다.

합을 저장할 sum변수, 최솟값을 저장할 min 변수를 만들어 for문을 반복하는 동안 square의 원소가 범위 내인지를 확인하는 if문을 작성해주면 되겠다.

int m = sc.nextInt();
int n = sc.nextInt();

int sum = 0;
int min = 10000;

int square[] = new int[101];
for(int i = 1;i<=100;i++) {
	square[i] = i * i;
	if(square[i] >= m && square[i] <= n) {
		sum += square[i];
		if(square[i] < min) {
			min = square[i];
		}

	}
}

여기서 만약 sum이 0인 상태 그대로라면 주어진 조건을 만족하는 완전제곱수가 없는것이므로 -1을 출력해주고, 아닌 경우에는 sum과 min을 출력해주면 된다.

 

전체 코드를 보면 다음과 같다.

import java.util.Scanner;

public class Baek1977 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int m = sc.nextInt();
		int n = sc.nextInt();
		
		int sum = 0;
		int min = 10000;
		
		int square[] = new int[101];
		for(int i = 1;i<=100;i++) {
			square[i] = i * i;
			if(square[i] >= m && square[i] <= n) {
				sum += square[i];
				if(square[i] < min) {
					min = square[i];
				}
				
			}
			
			
		}
		if(sum == 0) {
			System.out.println(-1);
		}
		else {
			System.out.println(sum);
			System.out.println(min);
		}
		
		

	}

}
반응형