본문 바로가기
프로그래밍/백준 문제 풀이(자바)

백준 11653번 자바 문제 답/해설(소인수분해 문제)

by 리드민 2021. 12. 24.
반응형

[1] 백준 카테고리
단계별로 풀어보기
기본 수학 2
3단계 11653번 문제
수인수분해

[2] 문제

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

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

2. 출력

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


3. 예제 입력 1
72


4.예제 출력 1
2

2

2

3

3


[3] 정답
1. 정답 해설 미포함

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

public class Main {
	public static int N = 0;	
	
	public static void main(String[] args) throws NumberFormatException, IOException{
		
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		N = Integer.parseInt(br.readLine());
		
		Fa();
	
	}
	
	public static void Fa() {
		int i = 2;
		while(N >= i) {
			if(N%i==0) {
				System.out.println(i);
				N /= i;
			}
			else {
				i++;
			}
		}
	}
}


2. 정답 해설 포함

import java.io.BufferedReader;
/* BufferedReader 사용을 위해서 java.io.BufferedReader 클래스를 import 한다
Enter를 경계로 인식하고 받은 데이터는 String으로 고정된다.*/
import java.io.InputStreamReader;
/* byte 단위 데이터를 문자 단위 데이터로 처리할 수 있도록 변환해주기 위해서
InputStreamReade를 사용한다.
InputStreamReader 사용을 위해서 java.io.InputStreamRead클래스를 import 한다.*/
import java.io.IOException;
/* 예외 처리를 위해서 IOException를 사용한다
IOException 사용을 위해서 java.io.IOException 클래스를 import 한다.*/

public class Main {
	public static int N = 0;
	// 접근제어자 public으로 메모리에 상주하게 int형 변수 N 선언
	public static void main(String[] args) throws NumberFormatException, IOException{
	// 접근제어자 public으로 메모리에 상주하게 리턴값이 없이 main 함수 선언
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		// BufferedReader 객체 br를 선언
		
		N = Integer.parseInt(br.readLine());
		// 값을 입력받아 전역 변수 N에 저장
		
		Fa();
		// 함수 Fa 호출
	
	}
	
	public static void Fa() {
	// 전역변수 public으로 메모리에 상주하게 리턴값이 없이 Fa 선언
		int i = 2;
		// int형 변수 i를 선언하고 값 2를 입력
		while(N >= i) {
		// N>=i 일때 괄호안의 코드 반복
			if(N%i==0) {
			// N%i==0 일때 괄호안의 코드 실행
				System.out.println(i);
				// i출력
				N /= i;
				// N/i하고 그 값을 변수 N에 저장
			}
			else {
				i++;
				// i+1한 값을 i에 저장
			}
		}
	}
}

 

 

	public static void Fa() {
		int i = 2;
		while(N >= i) {
			if(N%i==0) {
				System.out.println(i);
				N /= i;
			}
			else {
				i++;
			}
		}
	}

소인수를 구하기 위한 알고리즘을 메소드로 분리해서 따로 구현했다.

2부터 수인수를 구하기 위한 숫자를 나누어서 나머지가 0일 경우 출력한다.

2, 3, 4, 순서로 1씩 커지면서 나눗셈를 하게 된다.

 

반응형