[백준/BOJ] 11653번_소인수분해 (C++/Java)

JIMIN·2023년 2월 3일

BOJ_Bronze

목록 보기
61/75

https://www.acmicpc.net/problem/11653

문제


정수 N이 주어졌을 때, 소인수분해하는 프로그램을 작성하시오.


입력


첫째 줄에 정수 N (1 ≤ N ≤ 10,000,000)이 주어진다.


출력


N의 소인수분해 결과를 한 줄에 하나씩 오름차순으로 출력한다. N이 1인 경우 아무것도 출력하지 않는다.



💻 예제 입력

72

💻 예제 출력

2
2
2
3
3

풀이


정수 N을 입력받은 후 2부터 차례대로 나누어 떨어지는지 확인함.

2로 나누어 떨어지는 경우 N을 2로 나누고 2를 한번 출력한다.

그리고 또 다시 2로 나누어 떨어지는지 확인하기 위해 반복문을 다시 시작한다. (break)

→ 만약 2로 다 나누어 떨어지고 나면, 이후에 나오는 2의 배수(4, 6, 8..)로도 더 이상 나누어지지 않을테니 자동으로 무시됨.

그 후에는 3으로 같은 과정을 반복하여 N이 1이 될때 까지 반복함.


C++ 소스코드


#include <iostream>
using namespace std;

int main(void)
{
    int N;
    cin >> N;
    
    if (N == 1) return 0;

    while (N > 1)
    {
        // 2부터 나누어 떨어지는지 확인
        for (int i = 2; i <= N; i++) {
            // 나누어 떨어지면?
            if (N % i == 0) {
                N /= i;
                cout << i << "\n";
                break;  // 나누고 i를 출력한 뒤 다시 반복문 시작
            }
        }
    }
}

Java 소스코드


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());

        if (N == 1) return;

        while (N > 1)
        {
            // 2부터 나누어 떨어지는지 확인
            for (int i = 2; i <= N; i++) {
                // 나누어 떨어지면?
                if (N % i == 0) {
                    N /= i;
                    System.out.println(i);
                    break;  // 나누고 i를 출력한 뒤 다시 반복문 시작
                }
            }
        }
    }
}
profile
잘못된 코드나 정보가 있다면 알려주세요! 👋🏻

0개의 댓글