package com.practice;
import java.util.Scanner;
public class Pre_10 {
public static void main(String[]args){
// 소수 판별
// n / 1 = n
// n / n = 1
// 이렇게 두 경우만 소수이고, n / 2 = x ... 이렇게 나눠 떨어지는 경우는 소수가 아니다.
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
// 1부터 n를 제외하고 반복문을 돌려서 n/i로 나눠 떨어지는 경우 N를 출력 == 소수가 아니다.
String str = "";
int cnt = 0;
for(int i=2;i<=n;i++){
// 소수가 아니다.
if(n%i==0) {
cnt++;
str = "NO";
}
// 소수인 경우
if(cnt==0){
str="YES";
}
}
System.out.println(str);
// 출력은 한번만 되어야 한다 == 반복문 안에 들어가면 안된다.
}
}
틀린 이유
90점이 나왔다.
1) "1"이 소수인지 아닌지 판단해야 하는데 그 구문이 빠짐
2) 위의 조건식으로는 모든 값이 n% i=0이 나오게 됨
예를 들어 n이 10이면 2,3,4,5,6,7,8,9,10까지 반복하게 되는데 10을 10으로 나누면 무조건 0이 되고 cnt++되며
STR="NO"가 된다.
수정한 코드
소수는 1과 자기 자신으로만 떨어지는 수! 따라서 n이 7이고 int i가 1일 때
7%1 == 0 -> cnt 증가
7%2 != 0
7%3!= 0
7%4!= 0
7%5!= 0
7%6!= 0
i의 값이 7일 경우는 조건식에 해당하지 않기 때문에 반복문을 빠져나온다.
이런 식으로 소수는 cnt가 1이 되는 숫자이며, 1이 아니라면 1과 자기 자신을 제외하여 다른 수로 나누어 떨어짐 (== 소수가 아님)이 되기 때문에 NO가 출력되는 것이다.
package com.practice;
import java.util.Scanner;
public class Pre_10 {
public static void main(String[]args){
// 소수 판별
// n / 1 = n
// n / n = 1
// 이렇게 두 경우만 소수이고, n / 2 = x ... 이렇게 나눠 떨어지는 경우는 소수가 아니다.
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
// 1부터 n를 제외하고 반복문을 돌려서 n/i로 나눠 떨어지는 경우 N를 출력 == 소수가 아니다.
int cnt = 0;
for(int i=1;i<n;i++){
// 소수가 아니다.
if(n%i==0) {
cnt++;
}
}
// 소수 = 약수 2개
if(cnt==1) {
System.out.println("YES");
} else {
System.out.println("NO");
}
}
}
배운 점
1) 문제 꼼꼼하게 파악하기
2) 조건식 그냥 숫자만 바꾸지 말고 손으로 직접 풀어보기!
728x90
'📓 Study > Coding Test' 카테고리의 다른 글
GCD LCM = 유클리드 호제법 (0) | 2021.11.22 |
---|---|
[Algorithm Jobs] 윷놀이 (0) | 2021.11.10 |
[Algorithm Jobs] 약수 구하기 오답 노트 (0) | 2021.11.04 |
[Programmers/JAVA] 자연수 뒤집어 배열로 만들기 (0) | 2021.10.25 |
[Programmers/JAVA] 평균 구하기 (0) | 2021.09.24 |
댓글