👀 문제 설명
주어진 수 N개 중에서 소수가 몇 개인지 찾아서 출력하는 프로그램을 작성하시오.
입력
첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.
출력
주어진 수들 중 소수의 개수를 출력한다.
예제 입력 1
4
1 3 5 7
예제 출력 1
3
✍🏻풀이
수를 차례대로 입력받아 소수인지 확인한다.
먼저, 수가 2일 때는 소수이므로, ans++하고 바로 다음 수로 넘어가면 된다.
아닐 경우, 다음으로는 수가 짝수이거나 1인지 확인하고, 그렇다면 소수가 아니라는 뜻으로 다음 수로 넘긴다.
수가 홀수일 때는, for문을 사용해 수를 3부터 수 - 1까지의 홀수들로 나눠보고, 나누어떨어지면 소수가 아니라는 뜻이므로, isOkay값을 false로 바꾸고 break를 통해 for문을 빠져나온다.
for문이 끝난 후, isOkay를 사용해 소수일 때 ans++을 하면 된다.
코드
package boj;
// 소수 찾기 (https://www.acmicpc.net/problem/1978 )
import java.util.*;
import java.io.*;
public class BOJ_1978 {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
int N = Integer.parseInt(br.readLine());
int[] nums = new int[N];
st = new StringTokenizer(br.readLine());
int ans = 0;
for (int i = 0; i < N; i++) {
nums[i] = Integer.parseInt(st.nextToken());
if (nums[i] == 2) {
ans++;
continue;
}
if (nums[i] % 2 == 0 || nums[i] == 1)
continue;
boolean isOkay = true;
for (int j = 3; j < nums[i]; j += 2)
if (nums[i] % j == 0) {
isOkay = false;
break;
}
if (isOkay)
ans++;
}
bw.write(ans + "");
bw.flush();
bw.close();
}
}
'숨막히는 알고말고 > 문제 풀이' 카테고리의 다른 글
[SWEA] 가랏! RC카! (0) | 2021.08.09 |
---|---|
[Baekjoon] 수 찾기 (0) | 2021.08.08 |
[Baekjoon] 체스판 다시 칠하기 (0) | 2021.08.08 |
[SWEA] 정사각형 방 (0) | 2021.08.06 |
[SWEA] 퍼펙트 셔플 (0) | 2021.08.06 |