이 포스팅은 자바 8버전으로 풀이가 됐습니다.
문제
주어진 수 N개 중에서 소수가 몇 개인지 찾아서 출력하는 프로그램을 작성하시오.
입력
첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.
출력
주어진 수들 중 소수의 개수를 출력한다.
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main{
public static void main(String[]args) throws IOException {
try {
BufferedReader s_rd = new BufferedReader(new InputStreamReader (System.in));
int count_num = Integer.parseInt(s_rd.readLine());
int count=0, stack=0;
StringTokenizer st_num = new StringTokenizer(s_rd.readLine());
int num;
for(int i=0;i<count_num;i++) {
num = Integer.parseInt(st_num.nextToken());
for(int j=1;j<=num;j++) {
if(num%j==0) {
count++;
}
}
if(count==2)
stack++;
count=0;
}
System.out.println(stack);
}
catch(IOException e) {
}
}
}
|
풀이
[11번 라인] 처음 N 개의 값을 입력받는다.
[17번 라인] 입력받은 count_num 값을 반복문으로 돌려준다.
[18번 라인] 반복문을 돌려줄 값을 받았으므로 반복 횟수만큼의 값을 대입한다.
[추가 설명] 이때 반복문 내부에 nextToken은 readLine을 기준으로 다음 토큰의 값을 받는다.
[추가 설명] String 타입의 값으로 반환하므로, Interger.parseInt를 활용하여 정수형 타입으로 변환한다.
[19번 라인] 소수는 1과 자신 이외의 자연수로 나눌 수 없는 수이다.
[추가 설명] 1부터 반복하는 이유는 1을 따로 예외 처리하지 않았다.
[추가 설명] 입력받는 값에 대해서 자신의 숫자도 확인해야 하므로 <=를 활용하여 포함하는 수로 값을 지정한다.
[20번 라인] 입력받은 num을 j번으로 모두 나눠본다.
[추가 설명] 4인 경우 1,2,3,4로 각각 나눴을 때 count는 3번 증가한다.
[24번 라인] count의 값이 1과 자신인 2인 경우 변수에(stack) 값을 증가시킨다.
[26번 라인] count 값을 초기화 시킨 후 다시 17번 라인으로 돌아간다.
[28번 라인] 반복문이 모두 끝났을 때 stack에 저장된 값을 출력하여 카운팅 된 소수의 개수를 출력한다.
잡담)
바로 어제(2022.05.05) [소수 구하기 - 실버 3 ] 문제를 풀었을 때는 되게 많이 헷갈렸는데 문제를 헷갈린 이유를 생각해 보니 Scanner 쓰다가 백준을 풀면서 생각보다 시간이 너무 오래 걸리는 것 때문에 BufferedReader로 변경해서 코드를 구현하다 보니 생각이 계속 중간에 꼬여서 문제가 오래 걸렸던 것 같습니다 😂
오늘은 [ 실버 4 -소수 찾기 ]를 풀어보니 조금 더 익숙해진 문제와 나름 준수한 시간도 갖고 나왔기 때문에 풀고 나서 만족했습니다. BufferedReader는 어떤 방식으로 값을 대입하는 것인지 Java의 정석으로 보다가 StringTokenizer를 찾아내서 대입 후 정답에 성공했습니다😊
오타나 기타 모든 문제가 있는 경우 댓글 부탁드리겠습니다!
짧은 포스팅 읽어주셔서 감사드립니다.
다음 포스팅 때 뵙겠습니다!
'백준 - Java' 카테고리의 다른 글
[ 백준 - 2798 ] [Java] 블랙잭 (0) | 2022.05.08 |
---|---|
[ 백준 - 2439 ] [Java] 별 찍기 - 2 (0) | 2022.05.08 |
[ 백준 - 1929] [Java] 소수 구하기 (0) | 2022.05.05 |
[백준 - 1546] [Java] 평균 (0) | 2022.05.02 |
[백준 - 2753] [Java] 윤년 (0) | 2022.05.01 |