반응형
https://www.acmicpc.net/problem/1978
단계별 문제 풀기 기본 수학 2에 왔다
하루에서 알고리즘 문제 1~2문제 풀기씩 목표를 잡고 있는데
벌써 여기까지 왔다.
첫 문제 이다 보니까
나름 쉬운 문제가 나온 거 같다
첫 문제는 소수 찾기이다
소수란 1과 자기 자신만을 약수로 같은 수를 소수라고 한다.
- 문제
- 예제
- 문제 풀이
소수를 구할 수 있는 방법은 여러가지가 있다.
첫 번째 방법은
소수는 1과 자기 자신만이 약수를 가지기 때문에 주어진 수 전까지 하나하나씩
나누어 보면 알 수 있다
주어진 수 전까지 나누어 떨어지는 수가 있으면 소수가 아니고 없다면 소수 일 것이다
하지만 이 방법으로 코드를 짠다면 효율적인 코드가 아닐 것이다
두 번째 방법은
주어진 수의 제곱근을 이용하는 것이다.
만약 주어진 수가 47이라고 하자
47의 제곱근은 6.8 XXXXXX....이다
47을 제곱근 보다 작은 수 2,3,4,5,6으로 나눈다
나누어 떨어지지 않는다면 소수이고 나누어 떨어진다면 소수가 아니다
두 번째 방법으로 코드를 짜면 첫 번째 방법보다 효율적인 알고리즘 일 것이다.
- 코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int count = 0; //소수 개수 카운트
int N = Integer.parseInt(br.readLine()); // 수의 개수를 N에 입력받는다
st = new StringTokenizer(br.readLine(), " "); //StringTokenizer를 통해 문자열을 분리한다
for (int i = 0; i < N; i++) {
int num = Integer.parseInt(st.nextToken());
boolean check = true; // 소수인경우 true, 아닌경우 false
if (num == 1) { //1은 소수가 아니라서 계속 진행한다
continue;
}
for (int j = 2; j <= Math.sqrt(num); j++) {
if (num % j == 0) {
check = false;
}
}
if (check) { //check가 true이면 소수이다 count에 누적시켜준다
count++;
}
}
System.out.println(count); //소수 개수 출력
}
}
처음 블로그에 정리해봤는데
정리가 잘 되었는지 모르겠다ㅠㅠㅠㅠ
반응형
'성장 이야기 > Java' 카테고리의 다른 글
[Java]자바 입문-02 -자바 초보에서 탈출하기 - 변수와 자료형 (0) | 2021.12.02 |
---|---|
[jAVA]자바 입문-01 -자바 초보에서 탈출하기 (2) | 2021.11.25 |
[백준][JAVA]2750번 : 수 정렬하기 (0) | 2021.11.22 |
[백준][자바] 2581번:소수 (0) | 2021.11.15 |
[Java]프로그래머스-직사각형 나머지 한점 좌표 구하기 (0) | 2021.11.10 |