1. 문제 상세
https://www.acmicpc.net/problem/11653
2. 문제 접근
입력받은 수를 소인수분해 하는 과정을 출력하자.
입력받은 수 N 을 1이 될 때 까지 2부터 N 까지의 수로 나누며 나눈 수를 출력한다.
주의할 점은 N 을 나누었을 때 나머지가 0이 아닐 경우에만 다음 수로 나눠야한다는 것이다.
예를 들어서 N 이 12인 경우를 보자.
12를 2로 나눌 경우 나머지가 0이기 때문에 2로 나눠서 N 은 6이 되고 2를 출력한다.
6을 2로 나누면 나머지가 0이기 때문에 6을 2로 나눠서 N 은 3이 되고 2를 출력한다.
3은 2로 나누었을 때 나머지가 0이 아니기 때문에 2 다음인 3으로 나눠보자.
3을 3으로 나누면 나머지가 0이기 때문에 3으로 나눠 N 은 1이 되고 3을 출력한다.
N 이 1이 되었기 때문에 반복을 중단한다.
3. 문제 풀이
#include <iostream>
using namespace std;
int main() {
int n, i = 2;
cin >> n;
while(n != 1) {
if(n % i == 0) {
n /= i;
cout << i << endl;
}
else i++;
}
}
정수형 변수 n, i 를 선언하고 i 를 2로 초기화한다.
cin 으로 정수를 입력받아 n 에 저장한다.
while문으로 n 이 1이 아닐 때 반복하도록 한다.
반복에서는 if문으로 n 을 i 로 나눈 나머지가 0인 경우, n 의 값을 i 로 나누고, cout 으로 i 를 출력한다.
위의 경우가 아니라면 i 에 1을 더한다.
4. 성능 확인
5. 마무리
.
'백준 - 단계별로 풀어보기 > 약수, 배수와 소수' 카테고리의 다른 글
[백준] 2581번 : 소수 | C++ (1) | 2023.10.19 |
---|---|
[백준] 1978번 : 소수 찾기 | C++ (0) | 2023.10.19 |
[백준] 9506번 : 약수들의 합 | C++ (0) | 2023.10.19 |
[백준] 2501번 : 약수 구하기 | C++ (0) | 2023.10.19 |
[백준] 5086번 : 배수와 약수 | C++ (0) | 2023.10.19 |