[Algorithm Jobs] 소수 판별

    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

    댓글