본문 바로가기
알고리즘 문제

[알고리즘 문제] pfactorization

by 박연호의 개발 블로그 2019. 4. 9.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();

        while (num > 1) { // 나누는 대상의 값이 1이면 모두 나누어 떨어졌음을 의미하기 때문에 1보다 커야함
            for (int i = 2; i <= num; i++) { // 2~n까지의 수로 현재 num을 나누어 봄
                if (num % i == 0) { // i번째 숫자가 나누어 떨어지면 이는 소인수(n을 가장 작은 소수부터 시작했기 때문)
                    num /= i; // num을 i로 나눔.
                    System.out.println(i);
                    break;
                }
            }
        }

    }
}

문제는 입력받은 정수를 소인수분해 하는 문제이다. 소인수분해란 자연수를 소인수의 곱으로 나타낸 것을 의미한다. 12라는 수가 있다면 2x6으로 표현한다면 6은 소수가 아니기 때문에 2x2x3으로 소인수 분해를 표현할 수 있다.

 

아이디어는 입력받은 정수(num)가 1보다 클떄까지 while문을 반복한다. 이유는 입력받은 정수가 while문을 반복하면서 소수로 계속 나누어 지는데, 만약 더이상 소수로 나눌 수 없다면 즉 입력받은 정수가 1이 된다면 소인수를 모두 구했으니 while문을 빠져나와야 한다.

 

for문은 2에서 num까지 반복하는데 72를 입력받는다면 i=2일때 if문에서 걸려 72/2을 수행하고 소인수를 출력하고 for문을 빠져나온다. 이런 방법으로 소인수를 계속 찾고 소인수를 모두 찾게되면 num=1이 될 것이다. 그러면 while문을 탈출하게 된다.

'알고리즘 문제' 카테고리의 다른 글

[알고리즘 문제] Palindrome  (0) 2019.04.15
[알고리즘 문제] Streetree  (0) 2019.04.11
[알고리즘 문제] Fraction Sum  (0) 2019.04.08
[알고리즘 문제]  (0) 2019.04.08
[알고리즘 문제] attackRange  (0) 2019.04.08