Algorithm/Baekjoon

11653 소인수분해

BeomJun.Kwon 2022. 7. 25. 21:31

 

11653 소인수분해

 

 

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

 

 

 

이 문제의 해결 중점은 정수 N 의 최소공약수를 계속적으로 나누어 1이 될 때 까지의 값들이다.

while ( True )
   For문 ( 2 ~ N )
      현재 값의 최소 공약수로 나누고 break
   If문 ( N == 1 )
      종료

 

 

1. N == 1 일 때, 아무것도 출력하지 않는다.

if (N==1) { System.exit(0); }

 

 

2. 2~A 까지의 수 중에서 최소 공약수를 찾아내어 나누는 For문을 생성한다.

for (int j = 2; j <= N; j++) {
    if (N%j == 0) {
        N /= j;
        break;
    }
}

 

 

3. 최소 공약수를 계속적으로 나누어 N값이 1이 될 때 까지 나누어 준다.

while (true) {
    for (int j = 2; j <= N; j++) {
        if (N%j == 0) {
            N /= j;
            break;
        }
    }
}

 

 

4. 각 최대 공약수를 출력하고 N이 1의 값이 되어 최소 공약수가 더이상 없을 때 까지 진행한다.

while (true) {
    for (int j = 2; j <= N; j++) {
        if (N%j == 0) {
            N /= j;
            System.out.println(j);
            break;
        }
    }
    if (N == 1) {
        break;
    }
}

 

 

답안

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

    if (N==1) { System.exit(0); }

    while (true) {
        for (int j = 2; j <= N; j++) {
            if (N%j == 0) {
                N /= j;
                System.out.println(j);
                break;
            }
        }
        if (N == 1) {
            break;
        }
    }

}

 

 

 

'Algorithm > Baekjoon' 카테고리의 다른 글

10757 큰 수 A+B  (0) 2022.07.25