[백준 / C언어] 11653번 문제

Estelle·2023년 9월 14일

백준 C/C++언어

목록 보기
2/16

문제

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

입력

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

출력

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

코드

#include <stdio.h>
#include <stdlib.h>

void calculate(int num) {
  int temp = 2;
  int *prime = (int *)malloc(sizeof(int) * (num + 1));
  for (int i = 0; i <= num; i++) {
    prime[i] = 0;
  }

  while (num != 1) {
    while (num % temp == 0) {
      num = num / temp;
      printf("%d\n", temp);
    }
    temp++;
  }

  free(prime);
}

int main() {
  int num;
  scanf("%d", &num);

  calculate(num);
  return 0;
}

초기에 했던 실수는 배열의 크기를 너무나도 크게 잡았는데 스택 오버플로우 오류가 발생할 수 있다는 점이였다.
이를 해결하기 위해서 동적할당을 이용하였다. (malloc)

profile
I have prepared for My Life long 🌙

0개의 댓글