728x90
https://www.acmicpc.net/problem/2581
2581번: 소수
M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다. 단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다.
www.acmicpc.net
문제설명은 링크를 참조하세요.
이제 자바에 익숙해질겸 평소 풀고있던 백준 문제를 자바로 풀어 보았다.
소수를 판별하는 함수는 이전에 파이썬으로 만들어 둔 걸 참고하고 자바 코드로 바꿨다.
가변배열 ArrayList를 사용해서 쉽게 풀 수 있었다.
내 풀이 코드
import java.util.Scanner;
import java.util.ArrayList;
public class Sosu {
public boolean sosu(int n){
if (n < 2) {
return false;
}
int to = (int) Math.sqrt(n) + 1;
for (int i=2; i < to; i++) {
if ((n % i) == 0) {
return false;
}
}
return true;
}
public static void main(String[] args) {
Sosu is_sosu = new Sosu();
Scanner sc = new Scanner(System.in);
int min = sc.nextInt();
int max = sc.nextInt();
int count = 0;
ArrayList<Integer> list1 = new ArrayList<Integer>();
for (int i = min; i < max +1; i++){
if (is_sosu.sosu(i)){
count += i;
list1.add(i);
}
}
if (count == 0){
System.out.println(-1);
}
else {
System.out.println(count);
System.out.println(list1.get(0));
}
}
}
소수를 판별하는 함수를 만들어주고
입력 받은값(min~max)를 반복문을 돌려서 소수이면 count에 누적해서 더해주고 배열에 담아준다.
문제의 조건에서 범위내에 소수가 없으면 -1을 반환해야 하므로 count값을 가지고 조건문을 걸어주었다.
'백준' 카테고리의 다른 글
[JAVA] 9093 단어 뒤집기 (문자열 다루기) (0) | 2021.11.09 |
---|---|
백준 2941 크로아티아 문자 (0) | 2021.09.05 |