profile image

L o a d i n g . . .

article thumbnail image
Published 2021. 3. 6. 15:28

문제 : 양수 A가 N의 진짜 약수가 되려면, N이 A의 배수이고, A가 1과 N이 아니어야 한다. 어떤 수 N의 진짜 약수가 모두 주어질 때, N을 구하는 프로그램을 작성하시오.

 

정답 :

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
	int num;
	int num2;
	int count = 0;
	int sum = 0;
	scanf("%d", &num);
	scanf("%d", &num2);

	int *p = malloc(sizeof(int) * num);

	for (int i = 0; i < num; i++)
	{
		scanf("%d",*(p+i));
	}

	for (int i = 0; i < num; i++)
	{
		sum = 0;

		for (int j = i; j < num; j++)
		{
			sum += p[j];

			if (sum==num2)
			{
				count += 1;
				break;
			}

		}

	}

	printf("%d", count);

	free(p);

	return 0;
}

먼저 수열의 크기를 입력받아, 메모리 동적할당을 통해 입력 받은 크기 만큼의 수열을 만든다.

그 다음 합 M을 입력받고, 또 수열의 요소들을 입력받는다.

 

그런 다음 이 수열의 i번째 수부터 j번째 수까지의 합이 M이 되는 경우의 수를 구하는데,,

수열의 크기만큼 반복문을 돌린 다음, 또 중첩해서 반복문을 돌려 모든 요소들을 해당요소~끝 요소까지 검사해준다.

 

수열의 수를 차례차례 sum에 더한 다음, sum이 M 값이 되면 count 값을 증가시키고 두번째 반복문을 빠져나온다. 

첫번째 반복문까지 끝난 뒤에 이제 지금까지 누적시킨 count 값을 출력해준다. 

'ETC' 카테고리의 다른 글

[P4C] BOJ 10809 : 알파벳 찾기  (0) 2021.03.06
[P4C] BOJ 10773 : 제로  (0) 2021.03.06
22회 해킹캠프 후기 (feat.성실한 해커상 받은 썰)  (1) 2021.02.23
복사했습니다!