촉촉한초코칩
[백준] 11653(소인수분해) c언어 본문
문제
정수 N이 주어졌을 때, 소인수분해하는 프로그램을 작성하시오.
입력
첫째 줄에 정수 N (1 ≤ N ≤ 10,000,000)이 주어진다.
출력
N의 소인수분해 결과를 한 줄에 하나씩 오름차순으로 출력한다. N이 1인 경우 아무것도 출력하지 않는다.
#include <stdio.h>
int main(void) {
//A : 소인수분해한 값 넣을 배열
//T : 분해한 소인수들을 저장할 배열의 첨자용 변수
int num, A[20], T = 0;
scanf("%d", &num);
do {
if(num >= 2) {
int P = 2; //num을 나누는 수(2~N)
//2~N까지 num과 p 나누기
for(; P<=num; P++) {
if(num%P==0) //만약 0이라면 소수인
break;
}
//T번째에 P 넣기
A[T] = P;
//num에 P로 나눈 몫 넣기
num/=P;
T++;
}
else //num이 1이하라면 나가기
return 0;
} while(num != 1);
//T가 1이다. 즉, 자기 자신이 소수인 경우
if(T == 1)
printf("%d\n", A[0]);
else {
for(int j=0; j<T-1; j++)
printf("%d\n", A[j]);
printf("%d\n", A[T-1]);
}
}
작년 수업시간에 들었던 수업에서 코드 복붙..ㅎ
- 2부터 num까지 반복해서 나눈 나머지가 0인지 확인하고
- 0이 아니라면 아직 소수가 아니라는 뜻이므로 배열 A에 나머지 저장, num에는 몫을 저장해서 다시 나눈다.
- 마지막에 j로 for문을 T-1까지 돌리고 따로 배열 마지막 값을 출력하는데 이건 왜 그런건지 모르겠다..
for문을 T까지 돌리고 출력한 코드를 제출하면 틀렸다고 뜬다. (이유를 모르겠다..)
코드 제출하고 나니까 쉬운데 왜 나 혼자서는 못 짜겠지...(사실 귀찮은걸지도)
좀 하려고 노력하자...
'Algorithm' 카테고리의 다른 글
[백준] 25206(너의 평점은) c언어 (0) | 2023.09.13 |
---|---|
[백준] 11650(좌표 정렬하기) c언어 (0) | 2023.07.16 |
[백준] 10988(팰린드롬인지 확인하기) c언어 (0) | 2023.07.09 |
[백준] 2444(별 찍기 - 7) c언어 (0) | 2023.06.25 |
[미해결][백준] 25192(인사성 밝은 곰곰이) c언어 (0) | 2023.06.16 |