새소식

알고리즘 문제풀이/BOJ

[백준 알고리즘, 소수] 알고리즘문제, 1978번: 소수찾기

  • -

이번에 단계별로 문제풀기 다음 단계로 넘어갔어요

이번 단계는 소수에 관련된 파트에요

 

소수 파트 첫 번째 문제라 그런지 정답률도

높은(?)만큼 금방 쉽게 풀었어요

 

근데 정답률을 정말 무시하면 안되겠어요

49퍼인데 2번만에 맞춤...

for문에서 조건을 위한 변수를 하나 잘못써서....

 

소수를 판별하기 위해서는

소수가 무엇인지에 대해서 알아야겠죠???

간단히 이야기 하자면 소수는

1과 자기자신으로만 나누어지는 수를 소수라고 이야기해요

예를들어 2,3,5,7 등등....

2는 짝수중 유일하게 소수에요

2는 1과 자기자신 2로만 나누어지니까 소수가 맞아요

 

소수 판별법에는 여러가지가 있는데

그 중에서 소수의 정의를 이용한 코드를 짜봤어요

 

백준 알고리즘 1978번 소수찾기 문제

 

문제


주어진 수 N개 중에서 소수가 몇 개인지 찾아서 출력하는 프로그램을 작성하시오.

 

입력


첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.

 

출력


주어진 수들 중 소수의 개수를 출력한다.

 

백준 알고리즘 1978번 소수 찾기, 예제 입력 및 출력

 

백준 알고리즘 1978번 소수찾기 java 소스코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Exam {

	
	public static void main(String[] args) throws Exception{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
        // 입력받을 소수의 개수
		int input_num = Integer.parseInt(br.readLine());
		
		
		//숫자를 한 줄에 모두 입력받기
		String input = br.readLine();
		String [] number = input.split(" ");
		
        // 입력 받은 소수를 저장할 배열
		int [] arr = new int[input_num];
		
		// 문자를 숫자로 변환
		for(int i=0; i<input_num; i++) {
			arr[i] = Integer.parseInt(number[i]);
		}
		
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		int count = 0;	// 나누어지는 수
		int prime_count = 0;	// 소수의 개수 count
        
		for(int i=0; i<input_num; i++) {
			for(int j=2; j<=arr[i]; j++) {
            	// 나누어 떨어지는 수가 있는지 확인
                // 자기자신으로도 나누기 때문에
                // 자기자신으로만 나누어지면 count == 1
				if (arr[i] % j == 0) {
					count += 1;
				}
			}
			if ( count == 1)
				prime_count++;
			count =0;
		}
		bw.write(Integer.toString(prime_count) + "\n");
		br.close();
		bw.close();
	}

}

 

이해안가는 부분이나 모르시는 부분은 댓글로 남겨주세요

공감도 부탁드려요!!

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.