반응형
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);
}
}
}
반응형
'Java > 백준알고리즘' 카테고리의 다른 글
[Java] 백준알고리즘 #9063 대지 (0) | 2023.09.26 |
---|---|
[Java] 백준알고리즘 #15894 수학은 체육과목 입니다 (0) | 2023.09.26 |
[Java] 백준알고리즘 #1094 막대기 (0) | 2021.04.27 |
[Java] 백준알고리즘 #1676 팩토리얼 0의 개수 (0) | 2021.04.22 |
[Java] 백준알고리즘 #13458 시험 감독 (0) | 2021.04.15 |