망나니 AWOS의 일상
article thumbnail

문제 조건 

1. 소인수 분해 결과를 한 줄에 하나씩 오름차순으로 출력 (1,2,3 ~~) 

2. N이 1인 경우 아무것도 출력 안함

 

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int N = sc.nextInt();
        if(N == 1) {
            sc.close();
        }
        for(int i=2; i<=N; i++){

            while(N % i == 0) {
                N = N / i;
                System.out.println(i);
            }

        }
    }
}

조건문으로 N이 1일 때 sc.close()로 자원 반환을 시켜버리도록 구현하였다.

두 번째 반복문인 while문을 살펴보게 되면 조건이 N % i == 0이다.

 

즉, N에 12가 들어왔다고 가정하자. i는 첫 번째 반복문인 for문에서 2로 초기화가 되어있기 때문에 12 % 2 == 0, true이다.

N = N / i 이기 때문에 N은 다시 6으로 변경이 되고 쭉 나누어 떨어졌을 때 N에 3이 남게 된다.

 

N % 2 == 0 이 false가 되면서 while문을 탈출하게 되며 첫 번째 반복문인 for문에서 i=3이 되어서 while문에 있는 조건에 들어가서 N(3) % 3 == 0 이어서 마지막으로 3을 출력하고 while문 탈출, for문 탈출하게 되는 것이다.

'알고리즘 > 백준' 카테고리의 다른 글

[java] 백준 2420번 사파리월드  (4) 2021.07.25
[java] 백준 2581번 소수  (0) 2021.07.25
[java] 백준 4153번 직각삼각형  (2) 2021.07.23
[java] 백준 1978번 소수 찾기  (2) 2021.07.22
[java] 백준 10757번 큰 수 A+B  (2) 2021.07.21
profile

망나니 AWOS의 일상

@AWOS

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!