본문 바로가기

숨막히는 알고말고/문제 풀이

[Baekjoon] 소수 찾기

👀 문제 설명

문제

주어진 수 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