본문 바로가기
프로그래밍/백준 알고리즘 코드

백준 11653번 JAVA 소인수분해 [기본 수학2]

by 졸린이 2021. 4. 27.
반응형

정수를 입력하면 소인수분해 하는 프로그램을 작성하면 되는 아주 간단한... 수학을 놓은지 어언.. 몇 년이냐.. 

 

소인수분해 듣기는 했는데 정의가 정확하게 뭐였는지 까먹었당.. 그래서 구선생에게 물어보았다.

 

아하! 어떤 수를 소수들의 곱으로 나타내게 쪼개고 쪼개는 뭐 그런 작업이었다.

 

이것을 중학생 때? 배웠던가 아무튼 어렴풋한 기억이 있는데 암산으로 마구 코딩을 하기전에 먼저 손으로 소인수분해를 해보고 코드를 작성해보았다.

 

입력한 정수가 12 라면 우리는 소인수분해를 이렇게 할 것이다.

 

만약 72를 입력한다면?

소인수분해 정의도 기억이 잘 안 났지만 손으로 해보니 아주 자유자재로 써진다. 글씨체도 자유자재

아무튼 위에 풀이를 토대로 코드를 작성해본다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import java.util.Scanner;
 
public class Main {
    //baekjoon 11653 소인수분해 수학2
 
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        
        int i = 2;
        while(true) {
            if(n == 1)
                break;
            if(n % i == 0) {
                n /= i;
                System.out.println(i);
            } else {
                i++;
            }
        }
    }
}
 
cs

아주 간단한 코드가 되었다.

 

10행 : 어떤 수든 2부터 나눠지는지 판별할 것이므로 나누는 수는 2로 초기화 한다.

 

11, 12행 : 정수 N을 계속 나누고 나누고 더 이상 나눌수 없을 때 (몫이 1이 될 때) while문을 나간다.

 

14행 : N을 i(최초 2)로 나누고 나눠 떨어지면 N을 i로 나눈 몫으로 바꾸고(15행 n /= i;)

 

i를 출력한다.

 

17, 18행 : 만약 N이 i로 나눠지지 않으면 (최초 2) i값을 1 높여서 검사해본다.

 

후~

 

반응형

댓글