https://www.acmicpc.net/problem/2581
2581번: 소수
M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다. 단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다.
www.acmicpc.net
이번 문제도 소수를 구하는 문제이다
소수에 대해 이해하기만 하면 쉽게 다가갈 수 있는 문제이다
- 문제
- 예제
- 문제 풀이
전 포스팅을 보고 오면 이번 문제는 쉽게 풀 수 있는 문제인 거 같다
https://treemanstory.tistory.com/3
[백준][자바] 1978번 : 소수찾기
https://www.acmicpc.net/problem/1978 1978번: 소수 찾기 첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다. www.acmicpc.net 단계별 문제 풀기..
treemanstory.tistory.com
문제 이해를 위해 설명을 하자면 자연수 M과 N을 입력받아 M과 N 사이에 있는 소수들을 구해
소수들의 합을 구하고 소수들 중에 최솟값을 출력하는 문제이다.
전 포스팅을 봤듯이 M 과 N 사이에 있는 소수는 쉽게 구할 수 있다
그리고 소수를 구한 수로 합과 최솟값을 구해야 하므로
합을 넣는 변수와 최소값을 넣을 변수를 만들어 준다
합은 소수를 하나를 찾을때마다 누적시키면서 합을 구해주고
최솟값은 소수를 찾을 때마다 전에 찾은 소수 값과 비교해 주면서 최솟값을 구해준다
말로 설명하면 이해가 안될 수 있으므로 코드로 구현해보았다.
- 코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int sum = 0; //소수의 합을 저장할 곳
int min = 10000; // 소수들 중에서 최소값을 저장할곳 임의로 값을 일단 저장해두었다
int M = Integer.parseInt(br.readLine());
int N = Integer.parseInt(br.readLine());
for (int i = M; i <= N; i++) { //소수 구하기
boolean check = true; // 소수인 경우 true , 아닌경우 false
if (i == 1) { //1은 소수가 아니라서 넘어간다
continue;
}
for (int j = 2; j <= Math.sqrt(i); j++) {
if (i % j == 0) {
check = false;
}
}
if (check) { //소수일 때
sum += i; // 소수의 합을 누적시킨다
if (min > i) { //소수들 중에서 최솟값 구하기
min = i;
}
}
}
if (min == 10000) { //소수 값 없을 시 에는 -1를 출력해준다
System.out.println(-1);
} else {
System.out.println(sum); //소수의 합
System.out.println(min); //소수들중의 최솟값
}
}
}
'성장 이야기 > Java' 카테고리의 다른 글
[Java]자바 입문-02 -자바 초보에서 탈출하기 - 변수와 자료형 (0) | 2021.12.02 |
---|---|
[jAVA]자바 입문-01 -자바 초보에서 탈출하기 (2) | 2021.11.25 |
[백준][JAVA]2750번 : 수 정렬하기 (0) | 2021.11.22 |
[백준][자바] 1978번 : 소수찾기 (0) | 2021.11.11 |
[Java]프로그래머스-직사각형 나머지 한점 좌표 구하기 (0) | 2021.11.10 |